2013-07-11 107 views
1

隨着工作人員數量的增加,我發現用於MPI_scatter/MPI_gather的時間不斷增加(某種程度上線性),特別是當工作人員跨越不同節點時。如何提高MPI_scatter/MPI_gather的速度?

我以爲MPI_scatter/MPI_gather是一個並行進程,想知道是什麼導致上述增加?有沒有什麼技巧可以讓它更快,特別是對於跨CPU節點分佈的工作人員?

+3

您正在使用哪種MPI實現?這個工作是什麼規模(等級數量和節點數量)?節點之間的互連是什麼?在分散/聚集中移動了多少數據? –

+1

最重要的是,您是否也隨着工作人員數量的增加而增加總數據的大小?如果是這樣,那麼瓶頸將最終成爲根進程的I/O帶寬(可能是它的節點的通信網絡)。 – Zulan

回答

1

根級別必須將固定數量的數據推送到其他級別。只要所有等級都駐留在同一個計算節點上,該過程就會受到可用內存帶寬的限制。一旦涉及更多的節點,網絡帶寬(通常遠低於內存帶寬)成爲限制因素。

此外,發送消息的時間大致分爲兩部分 - 初始(網絡設置和MPI協議握手)延遲,然後是物理傳輸實際數據位所需的時間。由於數據量是固定的,所以總物理傳輸時間保持不變(只要傳輸類型並因此帶寬保持不變),但更多的設置/延遲開銷正隨着數據分散到的每個新等級而增加或從而收集,因此完成操作所花費的時間線性增加。

1

MPI_Scatter/Gather的工作方式因實現而異。一些MPI實現可能會選擇使用一系列MPI_Send作爲基礎機制。 可能影響MPI_Scatter工作原理的參數爲: 1.進程數量 2.數據大小 3.互連 例如,實現可以避免對發送/接收非常大的數據的極少量的隊列使用廣播。