隨着工作人員數量的增加,我發現用於MPI_scatter/MPI_gather的時間不斷增加(某種程度上線性),特別是當工作人員跨越不同節點時。如何提高MPI_scatter/MPI_gather的速度?
我以爲MPI_scatter/MPI_gather是一個並行進程,想知道是什麼導致上述增加?有沒有什麼技巧可以讓它更快,特別是對於跨CPU節點分佈的工作人員?
隨着工作人員數量的增加,我發現用於MPI_scatter/MPI_gather的時間不斷增加(某種程度上線性),特別是當工作人員跨越不同節點時。如何提高MPI_scatter/MPI_gather的速度?
我以爲MPI_scatter/MPI_gather是一個並行進程,想知道是什麼導致上述增加?有沒有什麼技巧可以讓它更快,特別是對於跨CPU節點分佈的工作人員?
根級別必須將固定數量的數據推送到其他級別。只要所有等級都駐留在同一個計算節點上,該過程就會受到可用內存帶寬的限制。一旦涉及更多的節點,網絡帶寬(通常遠低於內存帶寬)成爲限制因素。
此外,發送消息的時間大致分爲兩部分 - 初始(網絡設置和MPI協議握手)延遲,然後是物理傳輸實際數據位所需的時間。由於數據量是固定的,所以總物理傳輸時間保持不變(只要傳輸類型並因此帶寬保持不變),但更多的設置/延遲開銷正隨着數據分散到的每個新等級而增加或從而收集,因此完成操作所花費的時間線性增加。
MPI_Scatter/Gather的工作方式因實現而異。一些MPI實現可能會選擇使用一系列MPI_Send作爲基礎機制。 可能影響MPI_Scatter工作原理的參數爲: 1.進程數量 2.數據大小 3.互連 例如,實現可以避免對發送/接收非常大的數據的極少量的隊列使用廣播。
您正在使用哪種MPI實現?這個工作是什麼規模(等級數量和節點數量)?節點之間的互連是什麼?在分散/聚集中移動了多少數據? –
最重要的是,您是否也隨着工作人員數量的增加而增加總數據的大小?如果是這樣,那麼瓶頸將最終成爲根進程的I/O帶寬(可能是它的節點的通信網絡)。 – Zulan