Ceci est une ancienne révision du document !


Compilation et d'exécution d'un programme (C)

Langage C, code séquentiel

Le programme SommeVecVecSEQ.c effectue la somme des deux vecteurs A et B. Le résultat est mis dans C.

Compilation du programme

  • Définition du l'environnement) :
source /usr/local/modeles/gnu-4.6.3
  • Vérification de la version du compilateur
gcc --version

gcc (GCC) 4.6.3
  • Compilation
gcc -o SommeVecVecSEQ.c.exe SommeVecVecSEQ.c

Le fichier binaire (exécutable) SommeVecVecSEQ.c.exe a été généré.

Exécution sur le serveur de compilation :

./SommeVecVecSEQ.c.exe

⇒ Le résultat s'affiche a l'écran :

 Les deux vecteurs :

A =            1           2           3           4           5           6           7           8           9          10
 
B =            9           8           7           6           5           4           3           2           1           0
 
Le vecteur somme :
 
C =           10          10          10          10          10          10          10          10          10          10

Exécution sur les nœuds

Il y a un script de soumission (batch.csh), et un script d'exécution (batchrun.csh) (ou batch.sh et batchrun.sh, pour le shell bash).

C'est le script de soumission qui doit être lance et c'est lui qui appelle le script d'exécution.

batch.csh → batchrun.csh → binaire

./batch.csh
Your job 769504 ("batchrun.csh") has been submitted

qstat
job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID 
-----------------------------------------------------------------------------------------------------------------
 769504 0.00000 batchrun.csh   cicaluga     qw    06/12/2012 07:21:46
  • La sortie de l'écran (sortie standard) est redirigée dans le fichier batchrun.csh.o769504,
  • La sortie erreur (erreur standard) est redirigée dans le fichier batchrun.csh.e769504.
cat batchrun.csh.o769504

 Les deux vecteurs :
 A =            1           2           3           4           5           6           7           8           9          10
 B =            9           8           7           6           5           4           3           2           1           0
 Le vecteur somme :
 C =           10          10          10          10          10          10          10          10          10          10

Langage C, code parallèle

Le programme SommeVecVecPAR.c effectue la somme des deux vecteurs A et B. Le résultat est mis dans C. Chaque étape est effectuée sur 2 processus. Si le programme est exécuté sur plusieurs cœurs, seuls deux cœurs sont effectivement utilises.

Compilation du programme

  • Définition du l'environnement
source /usr/local/modeles/openmpi-1.4.5-gnu-4.6.3
  • Vérification
mpicc -showme
gcc -I/softs/openmpi-1.4.5-gcc-4.6.3/include -pthread -L/softs/openmpi-1.4.5-gcc-4.6.3/lib -lmpi -lopen-rte -lopen-pal -lrdmacm -libverbs -ldl -lnsl -lutil -lm
  • Compilation
mpicc -o SommeVecVecPAR.c.exe SommeVecVecPAR.c

Le fichier binaire (exécutable) SommeVecVecPAR.c.exe a été généré.

Exécution sur le serveur de compilation

mpirun -np 2 ./SommeVecVecPAR.c.exe

Le résultat s'affiche a l'écran :

 LES DEUX VECTEURS :
 A =            1           2           3           4           5           6           7           8           9          10
 B =            9           8           7           6           5           4           3           2           1           0
 LES DEUX VECTEURS LOCAUX :
 Je suis le proc            0 parmi            2  processus
 A local ( proc            0  )  =            1           2           3           4           5
 B local ( proc            0  )  =            9           8           7           6           5
 Je suis le proc            1 parmi            2  processus
 A local ( proc            1  )  =            6           7           8           9          10
 B local ( proc            1  )  =            4           3           2           1           0
 LE VECTEUR SOMME LOCAL : 
 C local ( proc            1  )  =           10          10          10          10          10
 C local ( proc            0  )  =           10          10          10          10          10
 LE VECTEUR SOMME :
 C =           10          10          10          10          10          10          10          10          10          10

Exécution sur les nœuds

Il y a un script de soumission (batch.csh) et un script d'exécution (batchrun.csh), pour shell tcsh (ou batch.sh et batchrun.sh, pour le shell bash).

C'est le script de soumission qui doit être lance et c'est lui qui appelle le script d'exécution.

batch → batchrun → binaire

./batch.csh

Your job 772030 ("batchrun.csh") has been submitted

qstat

job-ID  prior        name             user         state submit/start at     queue                          slots ja-task-ID 
-----------------------------------------------------------------------------------------------------------------
 772030 0.00000 batchrun.csh   cicaluga     qw    06/18/2012 07:41:51                                    2 

qstat

job-ID        prior   name           user         state submit/start at     queue                          slots ja-task-ID 
-----------------------------------------------------------------------------------------------------------------
 772030 0.05000 batchrun.csh   cicaluga     r     06/18/2012 07:42:16 r410B_ib_test@r410lin57.ens-ly     2 
  • La sortie de l'écran (sortie standard) est redirigée dans le fichier batchrun.csh.o772030,
  • La sortie erreur (erreur standard) est redirigée dans le fichier batchrun.csh.e772030.
cat batchrun.csh.o772030

/home/cicaluga/Support/FormationPSMN/SommeVecVecPar
 LES DEUX VECTEURS :
 A =            1           2           3           4           5           6           7           8           9          10
 B =            9           8           7           6           5           4           3           2           1           0
 LES DEUX VECTEURS LOCAUX :
 Je suis le proc            0 parmi            2  processus
 A local ( proc            0  )  =            1           2           3           4           5
 B local ( proc            0  )  =            9           8           7           6           5
 LE VECTEUR SOMME LOCAL : 
 C local ( proc            0  )  =           10          10          10          10          10
LE VECTEUR SOMME :
 C =           10          10          10          10          10          10          10          10          10          10
 Je suis le proc            1 parmi            2  processus
 A local ( proc            1  )  =            6           7           8           9          10
 B local ( proc            1  )  =            4           3           2           1           0
 C local ( proc            1  )  =           10          10          10          10          10
documentation/tutorials/build/c.1392304985.txt.gz · Dernière modification : 2020/08/25 15:58 (modification externe)