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 de l'environnement :

  • définition de l'environnement pour bash
module load iccifort/2017.4  
  • vérification de la version du compilateur
icc --version
Intel(R) C Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 17.0.4.196 Build 20170411
Copyright (C) 1985-2017 Intel Corporation.  All rights reserved.

Compilation :

icc -o SommeVecVecSEQ.exe SommeVecVecSEQ.c (avec intel)

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

Exécution sur le serveur de compilation :

./SommeVecVecSEQ.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

On utilise un script de soumission batch.sh pour le shell bash (ou batch.csh, pour le shell tcsh) pour soumettre le job sur les clusters de calcul.

C'est le script de soumission qui configure l'environnement puis appelle votre binaire (avec ses options, s'il en a) sur le noeud d'execution.

SGE → batch.sh → binaire

qsub batch.sh

Your job 769504 ("batch.sh") has been submitted

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

  • définition de l'environnement
module load iccifort/2017.4  
module load intel/2017.4/OpenMPI/3.0.0
  • Vérification
mpicc -showme

icc -I/applis/PSMN/debian9/software/Compiler/intel/2017.4/OpenMPI/3.0.0/include -Wl,-rpath -Wl,/applis/PSMN/debian9/software/Compiler/intel/2017.4/OpenMPI/3.0.0/lib -Wl,--enable-new-dtags -L/applis/PSMN/debian9/software/Compiler/intel/2017.4/OpenMPI/3.0.0/lib -lmpi

Compilation :

mpicc -o SommeVecVecPAR.exe SommeVecVecPAR.c

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

Exécution sur le serveur de compilation

mpirun -np 2 ./SommeVecVecPAR.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

On utilise un script de soumission batch.sh pour le shell bash (ou batch.csh pour le shell tcsh) pour soumettre le job sur les clusters de calcul.

C'est le script de soumission qui configure l'environnement puis appelle votre binaire (avec ses options, s'il en a) sur les noeuds d'execution.

SGE → batch.sh → binaire

qsub batch.sh

Your job 772030 ("batch.sh") has been submitted

qstat

job-ID  prior        name              user         state submit/start at     queue                          slots ja-task-ID 
----------------------------------------------------------------------------------------------------------------
 772030 0.00000      SommeVecVecPAR    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 SommeVecVecPAR   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 SommeVecVecPAR.o772030,
  • La sortie erreur (erreur standard) est redirigée dans le fichier SommeVecVecPAR.e772030.
cat SommeVecVecPAR.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.txt · Dernière modification: 2018/01/17 14:11 par cicaluga