2016-06-28 28 views
5

ich mein Programm auf das folgende Beispiel reduziert haben:Warum MPI_Barrier einen Segmentation Fault in C verursachen ++

#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; 
} 

ich kompilieren und den Code ausführen, erhalten Sie das folgende Ergebnis:

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 

Wenn Ich Kommentar aus der MPI_Barrier, oder führen Sie das Programm auf nur einem Knoten, der Code läuft gut. Ich verwende die folgenden Compiler:

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 

Dies scheint, wie es ein triviales Problem sein sollte, aber ich kann nicht scheinen, um es herauszufinden. Warum würde MPI_Barrier diesen einfachen Code verursachen, um Fehler zu segmentieren?

+0

Ich kann nicht reproduzieren. Ihr Code läuft ohne Absturz hier. – amaurea

+0

Ich bin nicht überrascht, es ist ein fast triviales Beispiel für MPI, und doch, was auch immer Compiler Combo ich habe oder etwas kooperiert einfach nicht. Ich hoffe irgendwie, dass jemand das schon einmal gesehen hat. – jboss

+0

Willkommen bei SO. Während Ihre Frage gut gestellt wird, ist es immer noch schwierig zu reproduzieren, also verstehen Sie Ihr Problem. Die wahrscheinlichste Antwort lautet: * Es stimmt etwas nicht mit Ihrer MPI-Installation *, aber das ist nicht sehr hilfreich. Könnten Sie vielleicht einige Details hinzufügen, wie Sie MPI installiert haben? Letztendlich könnte ein Fehlerbericht an den Paketanbieter (unter der Annahme, dass er aus einem Repository stammt) vielversprechender sein. – Zulan

Antwort

0

Es ist schwer zu entscheiden, was mit Ihrer Installation nicht stimmt. Wenn Sie jedoch eine der MPI Aromen verwenden können, vielleicht können Sie versuchen, dieses:

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

Alles, was ich sagen kann, es funktioniert mit offener MPI

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

und keine Ausnahme in meiner Fall. Es scheint wirklich umgebungsspezifisch zu sein.