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 charger perfboost et mpt/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}