Compilare C
Un simplu exemplu de cum se poate rula un job folosind un program scris în C și apoi compilat este ilustrat în această secțiune.
Programul C care va fi folosit este un program care numără numerele prime între 1 și N, folosind metodele MPI pentru a paraleliza procesul de calcul. Programul original folosit în exemplu și mai multe exemple de programe care folosesc MPI pot fi găsite la adresa http://people.sc.fsu.edu/~jburkardt/c_src/prime_mpi/prime_mpi.html.
Înainte de a realiza compilarea programului trebuie încărcat mediul MPI care va folosit:
[username@master c_mpi]$ module load openmpi-x86_64
Se compilează programul folosind compilatorul gcc pentru MPI:
[username@master c_mpi]$ mpicc -o prime_mpi prime_mpi.c
Se construiește fișierul pentru job. Fișierul în format text poate fi descărcat efectuând un clic aici.
[username@master c_mpi]$ more c_mpi_example.job
#!/bin/bash
# stabilirea numarului de procesoare si a numarului de procesoare per nod de calcul dorite
# si anume 2 noduri cu cate 24 procesoare fiecare (ppn=processors per node)
#PBS -l select=24
# setarea timpului maxim de executare a jobului la 1h si 30 de minute
#PBS -l walltime=1:30:00
# jobul va fi trimis către coada de execuție short
#PBS -q short
# denumirea literala a jobului pentru o identificare ulterioara
#PBS -N c_mpi_job
# trimiterea unui email de informare la pornire (begin), la sfarsit (end) si in cazul opririi executarii (abortion)
#PBS -m bea
# adresa de email la care se vor trimite mesajele
#PBS -M Această adresă de email este protejată contra spambots. Trebuie să activați JavaScript pentru a o vedea.
# se schimbă directorul de lucru in directorul care contine fisierele necesare simularii
cd /home/<nume_de_login>/c_mpi
# se pregătește mediul de lucru
# se curata modulele incarcate
module purge
# se incarca modulul pentru bibliotecile MPI
module load openmpi-x86_64
# se lanseaza in executie in mod paralel programul
# cu redirectarea mesajelor afișate pe consolă și mesajele de eroare în fișierul rezultat.out
mpirun -np $PBS_NP prime_mpi > rezultat.out 2>&1
După editarea fișierului pentru job trebuie lansat jobul folosind comanda qsub:
[username@master ~]$ qsub c_mpi_example.job
542.master.hpc.ugal.ro
[username@master ~]
Se poate vedea starea jobului folosind comanda qstat:
[username@master ~]$ qstat
Job ID Name User Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
542.master c_mpi_job username 0 R short
[username@master ~]
Mesajele care sunt furnizate de către program pot fi afișate în timp real prin folosirea comenzii tail ca în exemplul următor:
[username@master ~]$ tail -f rezultat.out
18 January 2016 04:38:03 PM
PRIME_MPI
C/MPI version
An MPI example program to count the number of primes.
The number of processes is 48
N Pi Time
1 0 0.116745
2 1 0.003314
4 2 0.000071
8 4 0.000066
16 6 0.000418
32 11 0.000062
64 18 0.000064
128 31 0.000061
256 54 0.000068
512 97 0.000065
1024 172 0.000084
2048 309 0.000128
4096 564 0.000278
8192 1028 0.000893
16384 1900 0.003110
32768 3512 0.011208
65536 6542 0.040599
131072 12251 0.152819
262144 23000 0.569714
PRIME_MPI - Master process:
Normal end of execution.
18 January 2016 04:38:04 PM
Rulare în mod interactiv
Pentru exemplificare, același program este rulat în mod interactiv, pentru două procesoare (core-uri).
Se pornește un job în regim interactiv solicitând 2 procesoare:
[username@master ~]$ qsub -I -l select=24
Schimbarea directorului curent în cel care conține programul:
[username@node-01 ~]$ cd c_mpi
Se încarcă mediul MPI:
[username@node-01 c_mpi]$ module load openmpi-x86_64
Se lansează programul prin intermediul comenzii mpirun:
[username@node-01 c_mpi]$ mpirun -np 24 prime_mpi
18 January 2016 04:52:40 PM
PRIME_MPI
C/MPI version
An MPI example program to count the number of primes.
The number of processes is 2
N Pi Time
1 0 0.000052
2 1 0.000002
4 2 0.000002
8 4 0.000002
16 6 0.000002
32 11 0.000002
64 18 0.000004
128 31 0.000008
256 54 0.000022
512 97 0.000077
1024 172 0.000273
2048 309 0.000930
4096 564 0.003410
8192 1028 0.012320
16384 1900 0.045740
32768 3512 0.169034
65536 6542 0.630567
131072 12251 2.371577
262144 23000 8.923689
PRIME_MPI - Master process:
Normal end of execution.
18 January 2016 04:52:53 PM
Se termină jobul interactiv prin părăsirea shell-ului:
[username@node-01 c_mpi]$ exit
logout
qsub: job 545.master.hpc.ugal.ro completed
Ultima actualizare 19 februarie 2020