2

我正在使用可以在http://bccd.net/下载的 BCCD(可启动集群 CD)将其设置为集群的 24 台计算机上试验我的分布式集群算法(使用 MPI 实现)。

我编写了一个批处理程序来运行我的实验,其中包括多次运行我的算法,改变节点的数量和输入数据的大小。

我想知道每次运行我的算法时在 MPI 通信中使用的数据量,这样我就可以看到在改变前面提到的参数时数据量是如何变化的。我想使用批处理程序自动完成所有这些。

有人告诉我使用 tcpdump,但我发现这种方法有些困难。

首先,在每次运行我的算法之前,我不知道如何在我的批处理程序中调用 tcpdump(它是用 C++ 编写的,使用命令系统进行调用),因为 tcpdump 需要另一个终端与我的应用程序并行运行。由于网络使用交换机,我无法在另一台计算机上运行 tcpdump。所以我需要在主节点上运行它。

其次,我在进行实验时看到了 tcpdump 的流量,但我无法弄清楚 MPI 使用的端口是什么。它似乎使用了许多端口。我想知道用于过滤包。

第三,我尝试捕获整个包并使用 tcpdump 将其保存到一个文件中,几秒钟后该文件为 3.5MB。但我的整个实验需要 2 天。因此,如果我遵循这种方法,最终的日志文件将会很大。

理想的方法是仅捕获包标头中的大小字段并将其相加以获得传输的数据总量。这样,日志文件将比我捕获整个包时小得多。但我不知道该怎么做。

另一个限制是我无法访问计算机光盘。所以我只有内存和我的 4GB USB 闪存驱动器。所以我不能有巨大的日志文件。

我已经考虑过使用一些 MPI 跟踪或分析工具,例如http://www.open-mpi.org/faq/?category=perftools中提到的那些。到目前为止,我只测试了 Sun Performance Analyzer。问题是我想在 BCCD 上安装这些工具会很困难,甚至可能是不可能的。除此之外,这个工具将使我的实验需要更长的时间才能结束,因为它会增加开销。但如果有人熟悉 BCCD 并认为使用其中一种工具是一个不错的选择,请告诉我。

希望有人有解决方案。

4

1 回答 1

2

无论如何,如果存在使用分片内存进行通信的多核节点,则 tcpdump 之类的实现将无法工作。

使用像MPE这样的东西几乎可以肯定是要走的路。这些工具增加的开销很小,如果你想计算消息,一些开销总是必要的。您可以使用 mpitrace 写出每个 MPI 调用,并自己解析生成的文本文件。顺便说一句,请注意,在bccd 网站上明确讨论了 MPE 。MPICH2 内置了 MPE,但它可以编译为任何实现。我只发现 MPE 的开销非常小。

IPM是另一个不错的工具,可以计算消息和大小。您应该能够解析 XML 输出,或者使用后处理工具并手动集成图表(例如按排名的 bytes_rx/bytes_tx 或消息缓冲区大小/计数图表)。IPM 的开销甚至比 MPE 还要少,而且主要是在程序完成文件 I/O 运行之后。

如果您真的非常担心这些方法中的任何一种的开销,您总是可以使用包装 MPI_Send、MPI_Recv 等的分析接口编写自己的 MPI 包装器,并且只计算每个进程发送和接收的字节数,然后输出最后只有那个总数。

于 2011-02-06T05:52:21.950 回答