Pagina 1 di 1

Compilare GADGET su IBM power7

Inviato: mer feb 05, 2014 6:01 pm
da Ganondolf
Ciao a tutti.
Questo è un problema un po' particolare e diverso da quello che si vede qui di solito, ma tentar non nuoce...

Ho per le mani un cluster IBM power7, su cui compilare il codice per simulazioni cosmologiche GADGET. Ho a disposizione tre diverse versioni di GADGET: GADGET2, stabile, P-GADGET3, beta della versione 3, L-GADGET3, versione migliorata, ma più instabile. GADGET2 dipende dalle librerie gsl e fftw2, mentre la versione 3 ha un'opzione per usare le più nuove fftw3.

Inizialmente, non trovando un'installazione di mpi nel percorso standard, ho installato openmpi e compilato GADGET2 senza (eccessivi) problemi. Tuttavia, non è ottimizzato, e infatti ricevo questo warning all'avvio:
[[10816,1],1]: A high-performance Open MPI point-to-point messaging module
was unable to find any relevant network interfaces:

Module: uDAPL
Host: power7l

Another transport will be used instead, although this may result in
lower performance.
Sono stato quindi indirizzato alla versione nativa di mpi, e ho ricompilato GADGET2 nuovamente senza (eccessivi) problemi.

La versione 3 di gadget, tuttavia, nonostante sia instabile ha implementate alcune funzioni che vorremmo avere, quindi sono passato alla compilazione di P-GADGET3 e successivamente L-GADGET3, poiché la versione P- occupa troppa ram (~950 GB :fiu ) e non è utilizzabile. Con openmpi tutto liscio, ma passando a ibm_mpi sono cominciati i problemi...

Primo tentativo: compilare con xlc (compilatore C ibm)
includo il path in .bashrc:

Codice: Seleziona tutto

export LD_LIBRARY_PATH=$HOME/.local/lib:/opt/ibmhpc/ppe.poe/lib64
PATH=$PATH:$HOME/.local/bin
fftw3:

Codice: Seleziona tutto

./configure --prefix=$HOME/.local --enable-mpi CFLAGS=-I/path/to/mpi.h/ LDFLAGS=-L/path/to/ibm_mpi/lib64/ MPICC=mpcc
make
gadget:

Codice: Seleziona tutto

CC = mpcc
OPTIMIZE = -O3 -g -q64
(vari include, librerie, linking, etc.)
Risultato: errore, "skipping incompatible libraries libfftw3_mpi.so etc. etc."
Ne ho dedotto che ha compilato in 32 bit, quindi provo togliendo l'opzione -q64, e così compila. Però poi gadget muore durante l'esecuzione, perché evidentemente non gli piacciono i 32 bit. In due punti diversi: nella versione P-, prova ad allocare 16 GB per processore (che sono 32... 512 GB) invece di 60 MB

Codice: Seleziona tutto

Failed to allocate memory for `Base' (16000 Mbytes).
task 31: endrun called with an error level of 122
Mentre nella versione L- si impianta in un sort

Codice: Seleziona tutto

code termination on task=0, function 'parallel_sort()', file 'parallel_sort.c', line 216: 'can't find the split points. That's odd'
Secondo tentativo: forzare la compilazione di fftw a 64 bit
fftw3:

Codice: Seleziona tutto

./configure --prefix=$HOME/.local --enable-mpi CFLAGS=-I/path/to/mpi.h/ LDFLAGS=-L/path/to/ibm_mpi/lib64/ CC='xlc -q64' MPICC=mpcc
make
qui muore in modo brutale:

Codice: Seleziona tutto

/usr/bin/ld: skipping incompatible /opt/ibmhpc/ppe.poe/lib64/libmpi_ibm.so when searching for -lmpi_ibm
/usr/bin/ld: skipping incompatible /opt/ibmhpc/ppe.poe/lib64/libpoe.so when searching for -lpoe
/usr/bin/ld: powerpc:common64 architecture of input file `../fftw/.libs/libdfftw.a(malloc.o)' is incompatible with powerpc:common output
/usr/bin/ld: powerpc:common64 architecture of input file `../fftw/.libs/libdfftw.a(putils.o)' is incompatible with powerpc:common output
/usr/bin/ld: powerpc:common64 architecture of input file `../fftw/.libs/libdfftw.a(twiddle.o)' is incompatible with powerpc:common output
../fftw/.libs/libdfftw.a(malloc.o):(.text+0x90): relocation truncated to fit: R_PPC64_REL24 against `fflush'
make[1]: *** [test_sched] Error 1
Terzo tentativo: compilare con gxlc (interpreta i flag di gcc e li passa a xlc)
fftw3:

Codice: Seleziona tutto

./configure --prefix=$HOME/.local --enable-mpi CFLAGS=-I/opt/ibmhpc/ppe.poe/include/ibmmpi/ LDFLAGS=-L/opt/ibmhpc/ppe.poe/lib64/ MPICC='mpcc -compiler gxlc'
make
gadget:

Codice: Seleziona tutto

CC = mpcc -compiler gxlc
OPTIMIZE = -O3 -g -q64
(vari include, librerie, linking, etc.)
La versione P- funziona correttamente. La versione L- invece mi sputa in un occhio e si rifiuta di partire:

Codice: Seleziona tutto

L-Gadget3_gxlc: relocation error: L-Gadget3_gxlc: symbol Base, version Base not defined in file libmpi_ibm.so with link time reference
Errore che mi risulta indecifrabile. Qualcuno può darmi una mano a capire che accidenti sta succedendo?