[Hpc-forum] MPI problemak
Rőczei Gábor
roczei at niif.hu
2013. Sze. 24., K, 17:14:15 CEST
Kedves Molnár Etele!
> van egy surgeto problemakor amit nem tudtam megoldani napok ota.
> Az egyik c++ kodom MPI-t hasznal integralasra, de sajnos nem mindig mukodik kellokepp a debreceni gepen.
>
> eloszor is az SGE fele mpi-ben nem fordul le mivel nem ismeri fel az MPI reszt ?
> mpi-selector --query -> mpt-2.04
mpi-selector helyett használd inkább a SGI MPT-s modult Debrecenben: module load sgi/mpt/2.04
A job scriptben mpirun.sge-t kell majd megadni a futtatáshoz (erre csak SGI MPT esetén van szükség, OpenMPI-nál mpirun-t kell használni). Példa:
#!/bin/bash
#$ -N TEST
#$ -pe mpi 60
mpirun.sge -np $NSLOTS program
Ezeket kell beállítani a fordításkor (akkor ha nem ismeri fel automatikusan):
CXXFLAGS=-I/opt/nce/packages/global/sgi/mpt/2.04/include
CFLAGS=-I/opt/nce/packages/global/sgi/mpt/2.04/include
FFLAGS=-I/opt/nce/packages/global/sgi/mpt/2.04/include
LDFLAGS=-L/opt/nce/packages/global/sgi/mpt/2.04/lib -lmpi
> A masik problemam az az, hogy probalom az ujabb gcc/4.6.4 fordito csomagot hasznalni es a .bashrc bele is irtam, hogy
> module load gcc/4.6.4 openmpi/1.6.3-gcc-4.7.2 es ez be is toltodik mivel megtalalom a
> module list parancsal, de mikor a kodot elinditom mindig azt a hibat kapom, hogy
>
> ModuleCmd_Load.c(199):ERROR:105: Unable to locate a modulefile for 'gcc/4.6.4'
> ModuleCmd_Load.c(199):ERROR:105: Unable to locate a modulefile for 'openmpi/1.6.3-gcc-4.7.2'
Debrecenben nem volt telepítve a 4.7.2-es OpenMPI verzió. Ezt most javítottam.
Így tudod betölteni őket:
DEBRECEN[service0] ~ (0)$ module load openmpi/1.6.3-gcc-4.7.2 gcc/4.7.2
DEBRECEN[service0] ~ (0)$ type gcc
gcc is /opt/nce/packages/global/gcc/4.7.2/bin/gcc
DEBRECEN[service0] ~ (0)$ type mpirun
mpirun is /opt/nce/packages/global/openmpi/1.6.3-gcc-4.7.2/bin/mpirun
DEBRECEN[service0] ~ (0)$
> erdekes az is, hogy az mpicxx.openmpi-t nem ismeri fel a szuperszamitogep !
OpenMPI esetén mpirun-t használj. Úgy van fordítva az OpenMPI, hogy képes értelmezni az SGE által definiált PE_HOSTFILE-os környezeti változót:
DEBRECEN[service0] mpi (0)$ ompi_info -all | grep gridengine
MCA ras: gridengine (MCA v2.0, API v2.0, Component v1.6.3)
MCA ras: parameter "ras_gridengine_debug" (current value: <0>, data source: default value)
Enable debugging output for the gridengine ras component
MCA ras: parameter "ras_gridengine_priority" (current value: <100>, data source: default value)
Priority of the gridengine ras component
MCA ras: parameter "ras_gridengine_verbose" (current value: <0>, data source: default value)
Enable verbose output for the gridengine ras component
MCA ras: parameter "ras_gridengine_show_jobid" (current value: <0>, data source: default value)
DEBRECEN[service0] mpi (0)$
Megjegyzés: OpenMPI helyett SGI MPT-t használj ha van rá lehetőséged, mert ez sokkal jobban ki tudja használni az SGI-s architektúrát Debrecenben.
Ezt cseréltem: mpiexec --> mpirun
> mi van akkor ha egyszerre 2 mpis programot futtatok pl,
>
> #!/bin/sh
> #$ -N test2
> #$ -l h_vmem=4G
> #$ -l h_rt=23:59:59
> #$ -pe mpi 24
> #$ -q parallel.q
>
> time mpirun -np 12 ./kod $writedir01/ > kod.out1 &
> time mpirun -np 12 ./kod $writedir11/ > kod.out2 &
> wait
>
> ez magatol erthetodo ? 24 thread 2 reszre osztva ? es "&" parhuzamosan futtnak
Igen, ez így fog történni.
Ez pedig egymás után fogja lefuttatni:
> time mpirun -np 24 ./kod $writedir01/ > kod.out1 ;
> time mpirun -np 24 ./kod $writedir11/ > kod.out2 ;
Üdvözlettel,
Rőczei Gábor
További információk a(z) Hpc-forum levelezőlistáról