2016-06-28 12 views
5

ho ridotto il mio programma al seguente esempio:Perché MPI_Barrier causare un errore di segmentazione in C++

#include <mpi.h> 

int main(int argc, char * argv[]) { 
    int rank, size; 

    MPI_Init(&argc, &argv); 
    MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Barrier(MPI_COMM_WORLD); 
    MPI_Finalize(); 
    return 0; 
} 

compilo ed eseguire il codice, e ottenere il seguente risultato:

My-MacBook-Pro-2:xCode_TrapSim user$ mpicxx -g -O0 -Wall barrierTest.cpp -o barrierTestExec 
My-MacBook-Pro-2:xCode_TrapSim user$ mpiexec -n 2 ./barrierTestExec 

================================================================================== = 
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES 
= PID 21633 RUNNING AT My-MacBook-Pro-2.local 
= EXIT CODE: 11 
= CLEANING UP REMAINING PROCESSES 
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES 
=================================================================================== 
YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault: 11 (signal 11) 
This typically refers to a problem with your application. 
Please see the FAQ page for debugging suggestions 

Se Commentando MPI_Barrier o eseguendo il programma su un solo nodo, il codice funziona correttamente. Sto usando i seguenti compilatori:

My-MacBook-Pro-2:xCode_TrapSim user$ mpiexec --version 
HYDRA build details: 
Version:         3.2 
Release Date:       Wed Nov 11 22:06:48 CST 2015 
CC:        clang  
CXX:        clang++  
F77:        /usr/local/bin/gfortran 
F90:        /usr/local/bin/gfortran 
Configure options:      '--disable-option-checking' '--prefix=/usr/local/Cellar/mpich/3.2_1' '--disable-dependency-tracking' '--disable-silent-rules' '--mandir=/usr/local/Cellar/mpich/3.2_1/share/man' 'CC=clang' 'CXX=clang++' 'FC=/usr/local/bin/gfortran' 'F77=/usr/local/bin/gfortran' '--cache-file=/dev/null' '--srcdir=.' 'CFLAGS= -O2' 'LDFLAGS=' 'LIBS=-lpthread ' 'CPPFLAGS= -I/private/tmp/mpich-20160606-48824-1qsaqn8/mpich-3.2/src/mpl/include -I/private/tmp/mpich-20160606-48824-1qsaqn8/mpich-3.2/src/mpl/include -I/private/tmp/mpich-20160606-48824-1qsaqn8/mpich-3.2/src/openpa/src -I/private/tmp/mpich-20160606-48824-1qsaqn8/mpich-3.2/src/openpa/src -D_REENTRANT -I/private/tmp/mpich-20160606-48824-1qsaqn8/mpich-3.2/src/mpi/romio/include' 
Process Manager:       pmi 
Launchers available:      ssh rsh fork slurm ll lsf sge manual persist 
Topology libraries available:   hwloc 
Resource management kernels available: user slurm ll lsf sge pbs cobalt 
Checkpointing libraries available:  
Demux engines available:     poll select 


My-MacBook-Pro-2:xCode_TrapSim user$ clang --version 
Apple LLVM version 7.3.0 (clang-703.0.31) 
Target: x86_64-apple-darwin15.5.0 
Thread model: posix 
InstalledDir:  /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin 

Questo sembra che dovrebbe essere un problema banale, ma io non riesco a capirlo. Perché MPI_Barrier fa sì che questo semplice codice seghi l'errore?

+0

Non riesco a riprodurre. Il tuo codice funziona senza crash qui. – amaurea

+0

Non sono sorpreso, è un esempio quasi banale di MPI, eppure qualunque combinazione di compilatori che ho o qualcosa non sta cooperando. Sto solo sperando che qualcuno possa averlo visto prima. – jboss

+0

Benvenuti in SO. Anche se la tua domanda è ben fatta, è ancora difficile riprodurlo e quindi capire il tuo problema. La risposta probabile è * c'è qualcosa di sbagliato nella tua installazione MPI *, ma non è di grande aiuto. Potresti aggiungere alcuni dettagli su come hai installato MPI? In definitiva, un bug report al provider del pacchetto (supponendo che provenga da un repository) potrebbe essere più promettente. – Zulan

risposta

0

È difficile stabilire cosa è sbagliato nell'installazione. Tuttavia, se è possibile utilizzare uno qualsiasi dei sapori MPI, forse si può provare questo:

http://www.owsiak.org/?p=3492

Tutto quello che posso dire, funziona con Open MPI

~/opt/usr/local/bin/mpicxx -g -O0 -Wall barrierTestExec.cpp -o barrierTestExec 
~/opt/usr/local/bin/mpiexec -n 2 ./barrierTestExec 

e non fa eccezione nel mio Astuccio. Sembra davvero essere specifico per l'ambiente.

Problemi correlati