MPI:有多少个插座?

时间:2012-01-25 11:20:01

标签: scalability mpi

我正在开发一个MPI应用程序,它在进程之间使用线程MPI调用。根据负载要求添加和删除线程。现在,我有一个问题,我在open-mpi论坛上找不到答案。

如果一组MPI进程(“rank”)已经有一个连接,即它们已经在进行发送 - 接收呼叫,然后一个新线程进入(任一进程),这也会进行发送 - 接收呼叫相同的MPI同行,MPI会打开新的套接字吗?

我知道细节是依赖于实现的,所以可能没有一般答案。但是,有没有办法找到答案?

对此技术的可扩展性存在疑问,这是出于其他原因而选择的。获得一些关于每个连接的新套接字数量的统计数据会很棒。

任何人都知道如何做到这一点?例如,查询哪个套接字是MPI_Send写入的特定实例?

我已尝试添加--mca btl self,sm,tcp --mca btl_base_verbose 30 -v -report-pid -display-map -report-bindings -leave-session-attached

非常感谢。

1 个答案:

答案 0 :(得分:1)

回答我自己的问题,这是我从Open-MPI的优秀人员那里学到的:

2012年1月24日下午5:34,devendra rai写道:

  

我试图找出MPI在发送消息时打开了多少个单独的连接。基本上,我对一堆不同的MPI进程进行了线程MPI调用(而这些进程又有线程MPI调用)。

     

关键是,添加了每个线程后,是否打开了新端口(即使发送方 - 接收方对之间已经有连接)?

在Open MPI中:没有。底层连接与您拥有的线程数无关。

  

有什么办法可以找到答案吗?我通过了MPI API,我发现的最接近的是与制图信息有关。这还不够,因为这只能告诉我逻辑连接(或者它)?

MPI没有用户级别的连接概念。您发送消息,发生奇迹,并在另一侧收到消息。 MPI没有说明它是如何到达那里的(例如,它甚至可能通过其他一些过程进行了路由)。

  

阅读Open MPI常见问题解答,我认为将“-mca btl self,sm,tcp --mca btl_base_verbose 30 -display-map”添加到mpirun会有所帮助。但我没有得到我需要的东西。基本上,我想知道每个进程访问的端口数(读取和写入)。

对于Open MPI的TCP实现,它基本上是每个对等体一个TCP套接字(加上一些其他实用程序fd)。但TCP套接字只是懒惰地打开,这意味着在你实际发送给对等体之前我们不会打开套接字。

- 杰夫斯奎尔斯

致Jeff Squyres的信用。