2012-01-25 160 views
1

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

如果一组MPI进程(“等级”)已经有一个连接,即它们已经在进行发送 - 接收调用,然后一个新的线程进入(进程)也进行发送 - 接收调用在相同的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

要回答我的问题,这里是我在开MPI从辉煌的人了解到:

在2012年1月24日,在下午5时34分,德文德拉·莱写道:

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

问题是,每添加一个线程,都会打开新的端口(即使发送方 - 接收方对之间已经有连接)?

在Open MPI:no。底层连接与您有多少个线程无关。

有没有什么办法可以找出答案?我使用了MPI API,而且我发现的最接近的是与制图信息有关。这是不够的,因为这只告诉我逻辑连接(或者是否)?

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

阅读开放MPI常见问题,我想加入 “--mca BTL自我,SM,TCP --mca btl_base_verbose 30 -display-图” 的mpirun会有所帮助。但我没有得到我需要的东西。基本上,我想知道每个进程访问多少个端口(读取和写入)。

对于开放式MPI的TCP实现,它基本上是每个对等点的一个TCP套接字(加上一些其他的实用程序fd)。但是,TCP套接字只是懒惰地打开,这意味着我们不会打开套接字,直到您真正发送给对等端。

- 杰夫斯奎尔斯

积分杰夫·斯奎尔斯。