2016-04-12 17 views
1

In OpenMPI, wenn ich den Call-Stack einer kollektiven Operation (z. B. MPI_Reduce) tief genug folgen, finde ich, dass es eine Funktion namens send() aufruft.Wo ist send() in OpenMPI implementiert?

Nach viel grepping, ich bin nicht sicher, wo send() implementiert ist. Ich vermute, dass send() in einem Makro oder einer obskuren Shim-Schicht verborgen sein kann.

Wo befinden sich die Implementierung (en) von send() in der OpenMPI-Codebasis?

Ich sehe OpenMPI v1.8.1, obwohl ich vermute, dass die Organisation des Sorce-Baumes zwischen den Versionen nicht so viel geändert hat.

+1

Das send() ist höchstwahrscheinlich der POSIX-Systemaufruf - es ist im Betriebssystem implementiert, nicht in MPI. –

Antwort

2

send(2) ist der BSD-Socket-Systemaufruf zum Senden von Daten über Netzwerk-Sockets. Es wird schließlich von der tcp BTL von Open MPI verwendet, um die eigentliche Netzwerkübertragung von einem Prozess zu einem anderen durchzuführen, und seine Implementierung befindet sich im Quellcode der Standard-C-Bibliothek und im OS-Kernel.

Wenn Sie Interesse an der tatsächlichen höheren Ebene Mechanismus sind die Open MPI verwendet, um Nachrichten von einem Rang zu einem anderen über TCP/IP-Netzwerke zu übertragen, dann die tcp BTL selbst ist in $OMPI_SOURCE/ompi/mca/btl/tcp/ gefunden werden (für ältere Offene MPI-Versionen) oder in $OMPI_SOURCE/opal/mca/btl/tcp/ (für neuere Versionen).