2016-04-12 9 views
3

Ich verwende das folgende Code-Segment, um die MPI-Bibliothek für mehrere Threads zu initialisieren. Jedoch bekomme ich immer die folgende Ausgabe, die besagt, dass diese MPI-Implementierung MPI_THREAD_MULTIPLE nicht unterstützt.MPI mit mehreren Pthreads

MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &provided); 
if(provided != MPI_THREAD_MULTIPLE) 
{ 
    fprintf(stderr, "This MPI implementation does not support MPI_THREAD_MULTIPLE.\n" 
} 

Auf

tun
mpiexec --version and ompi_info 

ich diese Ausgabe: mpiexec (OpenRTE) 1.4.3 und Open MPI: 1.4.3

ich kompilieren mit mpicc mpi_hello.c, wo die c Datei enthält den obigen Codeabschnitt. Irgendwelche Ideen, warum meine MPI-Bibliothek mehrere Threads nicht unterstützt? Ich möchte mpi-Nachrichten von verschiedenen Threads und nicht von Prozessen senden und empfangen.

Dank

Antwort

8

Sie geben nicht an, welche Plattform oder Distribution oder Build Sie verwenden. Wahrscheinlich wurde die von Ihnen verwendete Bibliothek nicht für die Verwendung mit mehreren Threads konfiguriert. Wenn die Sourcen, müssen Sie es mit so etwas wie bauen:

$ ./configure --enable-mpi-thread-multiple 

Sie können testen, welche Funktionen Ihre Binärdateien, indem Sie:

$ ompi_info | grep -i thread 
      Thread support: posix (mpi: yes, progress: no) 

Wenn es nicht unterstützt wird, müssen Sie wahrscheinlich zu build from source.

konsultieren Sie bitte die OpenMPI documentation on MPI_Init_Thread für wichtige Informationen, einschließlich Informationen über die Beschränkungen in diesem Modus ausgeführt wird:

Beachten Sie, dass MPI_THREAD_MULTIPLE Unterstützung wird nur leicht getestet. Es funktioniert wahrscheinlich nicht für Thread-intensive Anwendungen. Beachten Sie außerdem, dass nur die MPI-Punkt-zu-Punkt-Kommunikationsfunktionen für die unten aufgeführten BTLs als Thread-sicher gelten. Andere Unterstützungsfunktionen (z. B. MPI-Attribute) wurden nicht als sicher zertifiziert, wenn sie gleichzeitig von mehreren Threads verwendet werden.

Beachten Sie, dass die von Ihnen berichtete Version (1.4) ebenfalls sehr alt ist; Die aktuelle stabile Version ist v1.10.

Sie möchten vielleicht Ihr Design überdenken, wenn Sie mehrere Threads verwenden möchten; Es gibt mehrere Threading-Frameworks (z. B. Threaded Building Blocks), die besser geeignet sind als MPI, das hauptsächlich für Cluster-Anwendungen gedacht ist. Einige Alternativen:

3

Check out Dokumente des MPI auf Thread-Unterstützung: MPI_THREAD_MULTIPLE Unterstützung, wenn Öffnen MPI mit dem --enable-mpi-Thread-Multiple configure Switch konfiguriert wurde enthalten ist. Sie können die Ausgabe von ompi_info (1) überprüfen, um zu sehen, ob öffnen MPI MPI_THREAD_MULTIPLE Unterstützung hat:

shell$ ompi_info | grep -i thread 
     Thread support: posix (mpi: yes, progress: no) 

Der „mpi: yes“ Teil der obigen Ausgabe zeigt an, dass Offene MPI mit MPI_THREAD_MULTIPLE Unterstützung kompiliert wurden.

So Kasse ompi_info Ausgabe auf Ihrem System, und sehen, ob es unterstützt wird.