在OpenMPI中,如果我跟随任何集合操作(例如MPI_Reduce)的调用堆栈足够深,我发现它调用了一个名为send()的函数。
经过大量的grepping,我不确定send()的实现位置。我怀疑send()可能埋没在某种宏观或模糊的垫片层内。
位于OpenMPI代码库中的send()的实现在哪里?
我正在考虑OpenMPI v1.8.1,但我怀疑版本之间的组织没有那么大的变化。
答案 0 :(得分:2)
send(2)
是通过网络套接字发送数据的BSD套接字系统调用。它最终被Open MPI的tcp
BTL用于执行从一个进程到另一个进程的实际网络传输,其实现可以在标准C库的源代码和OS内核中找到。
如果您对Open MPI用于通过TCP / IP网络将消息从一个级别传输到另一个级别的实际更高级别机制感兴趣,那么tcp
BTL本身可以在{{1}中找到(对于较旧的Open MPI版本)或$OMPI_SOURCE/ompi/mca/btl/tcp/
(对于较新版本)。