2016-07-31 43 views
2

Ich habe meine OpenMPI und gcc auf meinem MacOS installiert. C-Syntax für OpenMPI könnte perfekt laufen. Die C++ - Syntax für OpenMPI wird jedoch immer nicht erkannt. Beispielsweise zeigt die Zeile mit void MPI::Init(int &argc, char**&argv); den Fehler use of undeclared identifier 'MPI' an.Verwendung der nicht deklarierten Bezeichner 'MPI' bei Verwendung von C++ Syntax für OpenMPI unter MacOS

Kann jemand ein detailliertes Verfahren geben, um dieses Problem zu beheben?

#include "mpi.h" 
#include <stdio.h> 
#include <iostream> 

using namespace std; 

int main(int argc, char** argv) { 


void MPI::Init(int &argc, char**&argv); 

// Get the number of processes 
int world_size; 
MPI_Comm_size(MPI_COMM_WORLD, &world_size); 
//int Comm::Get_size() const 
// Get the rank of the process 
int world_rank; 
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank); 

// Get the name of the processor 
char processor_name[MPI_MAX_PROCESSOR_NAME]; 
int name_len; 
MPI_Get_processor_name(processor_name, &name_len); 

// Print off a hello world message 
printf("Hello world from processor %s, rank %d out of %d processors\n", 
     processor_name, world_rank, world_size); 


// Finalize the MPI environment. No more MPI calls can be made after this 
MPI_Finalize(); 

} 
+0

Gibt 'mpi.h' einen Namensraum' MPI' an, in dem es eine 'Init()' Funktion gibt? Oder was ist "MPI"? –

Antwort

2

Es scheint Ihre OpenMPI Installation ohne C++ Bindungen gebaut wurde. Während OpenMPI immer noch die C++ - Bindungen enthält, waren sie tatsächlich removed from the standard years ago. Wahrscheinlich müssen Sie OpenMPI neu erstellen, um die C++ - Bindungen zu aktivieren, die davon abhängen, wie Sie es ursprünglich installiert haben.

Da sie nicht Teil des Standards sind, ist die Empfehlung, nicht die C++ - Bindungen an erster Stelle. Stattdessen ist die häufigste Empfehlung Boost.MPI zu verwenden.

Leider scheint es, dass Boost.MPI nicht mehr aktiv entwickelt ist (letzter Fehler vor 2 Jahren geschlossen), und es gibt einige wirklich böse offene Fragen, so kann ich nicht Boost.MPI empfehlen. Es gibt einige coole MPI-Typ-Traits-Ansätze, aber ich kenne keinen allgemein akzeptierten/aktiv entwickelten Wrapper.

+0

kann ich es verstehen, wie OpenMPI die vollen Funktionen C unterstützen, während C++ teilweise unterstützt wird? Ziehen die meisten OpenMPI-Anwendungsprogrammierer C statt C++ vor? – Charles

+1

OpenMPI ist eine Implementierung des MPI-Standards. Generell entwickeln Sie den MPI-Standard - keine spezielle Implementierung. Die C++ - Bindungen wurden vor Jahren aus dem Standard entfernt. Sie sollten sie also nicht verwenden, auch wenn einige Implementierungen sie möglicherweise noch bereitstellen. – Zulan

0

Ich hatte das gleiche Problem bei der Installation von Open-MPI mit Homebrew in Mac OS X (Ich bin ein Neuling in Mac OS X von Debian/Ubuntu Linux). Zum Glück habe ich es gelöst. Wie Zulan sagte, wurde Ihre Open-Mpi-Installation ohne C++ - Bindungen erstellt. Ich denke jedoch, die beste Lösung ist es, es direkt aus dem Quellcode neu zu erstellen. Ich habe die TAR-Dateien direkt von der Homepage, und wenn man näher betrachten, werden Sie sehen, dass die C++ Bindungen sind standardmäßig deaktiviert (gehen Sie wie folgt innerhalb des untar Ordner):

$ ./configure -help 

--enable mpi-cxx ermöglichen C++ MPI-Bindungen (Standard: deaktiviert)

Also, im Grunde wieder aufgebaut ich Open-mpi direkt die Flagge das Hinzufügen, wie folgt:

$ ./configure --enable-mpi-cxx 

Dann, gerade s machen ure Sie wissen, wo Sie es installiert haben (wenn Sie --prefix = oder die Standardeinstellung), um es richtig mit Ihrem Makefile zu verknüpfen. Weitere Informationen zu diesem Thema finden Sie unter https://github.com/open-mpi/ompi/issues/3173.

0

Wenn Sie OpenMPI homebrew mit installiert haben, müssen Sie es zunächst deinstallieren:

brew uninstall openmpi 

Und dann neu installieren, so dass C++ Bindungen:

brew install openmpi --with-cxx-bindings 

Siehe brew info openmpi für eine vollständige Liste der Optionen. Beachten Sie, dass brew das Standard-Build von OpenMPI verwenden muss, um es aus der Quelle zu erstellen, anstatt eine vorkompilierte Flasche zu verwenden, sodass die Installation länger dauert als üblich.