2011-02-06 61 views
2

我在使用BCCD(可引導集羣CD)作爲集羣設置的24臺計算機上實驗我的分佈式集羣算法(使用MPI實現),該集羣可以在http://bccd.net/下載。如何測量我的MPI程序傳輸的數據量?

我已經寫了一個批處理程序來運行我的實驗,這個實驗包括運行我的算法幾次,改變了節點的數量和輸入數據的大小。

我想知道每次運行我的算法時MPI通信中使用的數據量,以便在更改上述參數時可以看到數據量如何變化。我想用批處理程序自動完成所有這些。

有人告訴我使用tcpdump,但是我發現這種方法有些困難。

首先,我不知道如何在每次運行我的算法之前,在我的批處理程序(使用命令系統進行調用的C++編寫)中調用tcpdump,因爲tcpdump需要另一個終端與我的應用程序。由於網絡使用交換機,因此我無法在另一臺計算機上運行tcpdump。所以我需要在主節點上運行它。

其次,在我的實驗進行中,我看到了tcpdump的流量,我無法弄清楚MPI使用的端口是什麼。它似乎使用許多端口。我想知道用於過濾軟件包。

第三,我嘗試捕獲整個軟件包並使用tcpdump將其保存到文件中,幾秒鐘後文件爲3.5MB。但是我的整個實驗需要2天。所以如果我遵循這個方法,最終的日誌文件將會很大。

理想的方法是隻捕獲包的頭部中的大小字段,並將其總和,以獲得傳輸的總數據量。以這種方式,日誌文件將比我捕獲整個軟件包時小得多。但我不知道該怎麼做。

另一個限制是我沒有訪問計算機光盤。所以我只有RAM和我的4GB USB閃存驅動器。所以我不能擁有巨大的日誌文件。

我已經想過使用一些MPI跟蹤或剖析工具,如http://www.open-mpi.org/faq/?category=perftools中提到的那些工具。至今我只測試過Sun性能分析器。問題是,我猜這些工具很難在BCCD上安裝,甚至是不可能的。除此之外,這個工具會讓我的實驗花費更長的時間來結束,它會增加開銷。但是如果有人熟悉BCCD並認爲使用這些工具是一個不錯的選擇,那麼請讓我知道。

希望有人有解決方案。

回答

2

無論如何,如果有多核心節點使用碎片內存進行通信,像tcpdump這樣的實現將不起作用。

使用類似MPE的東西幾乎肯定是要走的路。這些工具增加了很少的開銷,並且如果要計算消息,一些開銷總是非常必要的。您可以使用mpitrace寫出每個MPI調用,並自己解析生成的文本文件。順便說一下,請注意MPE在bccd website上進行了明確的討論。 MPICH2內置MPE,但可以編譯爲任何實現。我只發現MPE的開銷很小。

IPM是另一個不錯的工具,可以計算消息和尺寸;您應該能夠使用parse the XML output,或者使用後處理工具,並且只需手動整合graphs(例如按等級排列的bytes_rx/bytes_tx或消息緩衝區大小/計數圖)。 IPM的開銷甚至低於MPE,主要是在程序完成運行以執行文件I/O之後。

如果您真的超級擔心這些方法的開銷,您可以使用包裝MPI_Send,MPI_Recv等的profiling interface編寫自己的MPI包裝,並且只計算每個進程發送和接收的字節數量,並在最後輸出該總數。

+0

感謝您的回覆。我會檢查這些可能性。 – cesarsalgado 2011-02-06 14:01:48

相關問題