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:
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.
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

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
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
Codice: Seleziona tutto
CC = mpcc
OPTIMIZE = -O3 -g -q64
(vari include, librerie, linking, 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
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'
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
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
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
Codice: Seleziona tutto
CC = mpcc -compiler gxlc
OPTIMIZE = -O3 -g -q64
(vari include, librerie, linking, etc.)
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