Perfboost¶
Perfboost est un utilitaire pour wrapper l'API mpi utilisé par un code vers la librairie constructeur MPT SGI.
Certaines fonctions MPI ne sont pas interfacées, par ailleurs il peut y avoir un problème concernant la compatibilité suivant les versions des librairies utilisés (module load perfboost ; man perfboost
).
perfboost
a été validé sur l'utilisation de la librairie intel MPI du module intel-mpi-4, intel-mpi-5
, et les compilateur intel
.
Pour l'utiliser, il faut avoir compilé un code avec une librairie autre que mpt
, ici compilée avec intel mpi
:
[homer@thor primes]$ module load intel-compilers-12/12.1.7.367 intel-mpi-4/4.1.3.048 [homer@thor primes]$ make -- Compilation : primes.o -- Link primes : primes.o [homer@thor primes]$ module list 1) intel-compilers-12/12.1.7.367 2) intel-mpi-4/4.1.3.048
- Une première utilisation avec la librairie intel-mpi :
[homer@thor primes]$ mpirun -np 6 /home/gueguenm/code_bench/primes/primes Domaine du master: 1666670 Domaine d'un noeud: 1666666 Taille du domaine: 10000000 Nb de primes: 664575 Temps de calcul : 5.12946081161499 secondes
- Une seconde utilisation avec
perfboost
, il faut chargerperfboost
etmpt/2.10
:
[homer@thor primes]$ module unload intel-mpi-4/4.1.3.048 [homer@thor primes]$ module load mpt/2.12 perfboost [homer@thor primes]$ ldd /home/homer/code_bench/primes/primes # verification des liens vers les libs dynamiques perfboost linux-vdso.so.1 => (0x00007fffedae6000) libmpigf.so.4 => /opt/sgi/perfboost/lib/libmpigf.so.4 (0x00007fffed8e4000) libmpi_dbg.so.4 => /opt/sgi/perfboost/lib/libmpi_dbg.so.4 (0x00007fffed6e2000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fffed4c8000) librt.so.1 => /lib64/librt.so.1 (0x00007fffed2c0000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fffed0a2000) libm.so.6 => /lib64/libm.so.6 (0x00007fffece1e000) libc.so.6 => /lib64/libc.so.6 (0x00007fffeca8a000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fffec873000) libmpi.so => /opt/sgi/mpt/mpt-2.10/lib/libmpi.so (0x00007fffec503000) /lib64/ld-linux-x86-64.so.2 (0x00007fffedae7000) libcpuset.so.1 => /usr/lib64/libcpuset.so.1 (0x00007fffec2f6000) libbitmask.so.1 => /usr/lib64/libbitmask.so.1 (0x00007fffec0f2000) [homer@thor primes]$ export PERFBOOST_VERBOSE=1 # variable optionelle [homer@thor primes]$ mpirun -np 6 perfboost -impi /home/homer/code_bench/primes/primes MPI: SGI PerfBoost library active Domaine du master: 1666670 Domaine d'un noeud: 1666666 Taille du domaine: 10000000 Nb de primes: 664575 Temps de calcul : 2.57471234211698 secondes MPI: SGI PerfBoost library run complete
Il faut enfin appeler perfboost
, ainsi que mpt/2.10
au niveau de l'exécution dans le script :
#PBS -l walltime=00:60:00 #PBS -l select=2:ncpus=20:mpiprocs=20 #PBS -N IMB #PBS -j oe #PBS -q default module purge module load intel-compilers-12 module load perfboost module load mpt/2.10 cd ${PBS_O_WORKDIR} #Affichage dans le fichier de sortie de plusieurs informations NCPU=`wc -l < $PBS_NODEFILE` IMB_DIR=/home/homer/code_bench/imb/3.2.4/src MPI1=$IMB_DIR/IMB-MPI1 cd ${PBS_O_WORKDIR} echo "---------------------------------------" echo "Run Perfboost +intel mpi "`date` echo "---------------------------------------" mpiexec_mpt perfboost -impi ${MPI1} -npmin ${NCPU}