OpenMPI 中的 send() 在哪里实现?

Where is send() implemented in OpenMPI?

在 OpenMPI 中,如果我足够深入地跟踪任何集体操作(例如 MPI_Reduce)的调用堆栈,我会发现它调用了一个名为 send() 的函数。

经过大量的 grepping,我不确定 send() 是在哪里实现的。我怀疑 send() 可能被埋在宏内部或某种模糊的填充层中。

OpenMPI 代码库中 send() 的实现位于何处?

我正在查看 OpenMPI v1.8.1,但我怀疑源代码树的组织在版本之间没有太大变化。

send(2) 是 BSD 套接字系统调用,用于通过网络套接字发送数据。 Open MPI 的 tcp BTL 最终使用它来执行从一个进程到另一个进程的实际网络传输,其实现可以在标准 C 库的源代码和 OS内核。

如果您对 Open MPI 用于通过 TCP/IP 网络将消息从一个级别传输到另一个级别的实际更高级别机制感兴趣,那么 tcp BTL 本身可以在$OMPI_SOURCE/ompi/mca/btl/tcp/(对于较旧的 Open MPI 版本)或 $OMPI_SOURCE/opal/mca/btl/tcp/(对于较新的版本)。