[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