2016-04-20 14 views
1

In C Scattering über ++, ein Beispiel für MPI_Scatter Verwendung ist:Mit MPI_Scatter mit C++ - verschiedene Kommunikatoren

MPI::COMM_WORLD.Scatter(sendbuf, 100, MPI::INT, recvarr, 100,MPI::INT, root); 

Dieser den Inhalt sendbuff in 100 separaten Prozess streut recvarr auf jeden Prozess zu machen, aber NUR im MPI World Communicator.

Im Gegensatz zu MPI_Scatter in C hat die C++ - Version keinen Eingang für den Communicator. Wie kann ich dieses Beispiel so ändern, dass es für jeden Kommunikator und nicht nur für MPI_COMM_WORLD funktioniert?

Sagen Sie zum Beispiel, mein Communicator heißt comm. Wie kann ich sendbuff innerhalb der comm Communicator-Gruppe anstelle von MPI_COMM_WORLD streuen?

Antwort

5

comm.Scatter(sendbuf, 100, MPI::INT, recvarr, 100,MPI::INT, root);

Das Objekt links von der . ist das MPI Kommunikator Argument. MPI::COMM_WORLD geschieht eine vordefinierte Instanz eines MPI Kommunikator sein, die die vordefinierten MPI_COMM_WORLD

Hinweis auf den C-Bindung entspricht, dass das MPI C++ Bindungen in MPI-3,0-gelöscht wurden, weil sie zu wenig genutzt wurden, schwer zu warten, und hatte klobige Missverständnisse wie diese.