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

Ultimele actualizări

Informații generale