Где send() реализован в OpenMPI?

В OpenMPI, если я достаточно глубоко отслеживаю стек вызовов любой коллективной операции (например, MPI_Reduce), я обнаруживаю, что она вызывает функцию с именем send().

После долгих поисков я не уверен, где реализована функция send(). Я подозреваю, что send() может быть скрыт внутри макроса или какого-то неясного слоя прокладки.

Где находятся реализации send() в кодовой базе OpenMPI?

Я смотрю на OpenMPI v1.8.1, хотя подозреваю, что организация исходного дерева не сильно изменилась между версиями.


person solvingPuzzles    schedule 12.04.2016    source источник
comment
Этот send(), скорее всего, является системным вызовом POSIX - он реализован в операционной системе, а не в MPI.   -  person dabo42    schedule 12.04.2016


Ответы (1)


send(2) — это системный вызов сокетов BSD для отправки данных через сетевые сокеты. . В конечном итоге он используется tcp BTL Open MPI для выполнения фактической сетевой передачи от одного процесса к другому, и его реализацию можно найти в исходном коде стандартной библиотеки C и в ядре ОС.

Если вас интересует фактический механизм более высокого уровня, который Open MPI использует для передачи сообщений от одного ранга к другому по сетям TCP/IP, то сам tcp BTL можно найти в $OMPI_SOURCE/ompi/mca/btl/tcp/ (для более старых версий Open MPI) или в $OMPI_SOURCE/opal/mca/btl/tcp/ (для более новых версий).

person Hristo Iliev    schedule 12.04.2016