我有一個使用mpi的C++代碼,並以順序並行序列模式執行。上述模式在時間循環中重複。 使用串行代碼驗證代碼時,我可以減少並行部分的時間,事實上,減少與處理器的數量幾乎成線性關係。
執行並行代碼的連續部分(大量操作+寫入文件)的有效方法?
我面臨的問題是,使用更高的處理器數量時,順序部分所需的時間也大大增加。
與整個程序的總順序時間相比,並行部分執行所需的時間更少。
因此,儘管在使用更多處理器時並行部分的時間減少,但由於執行順序部分時增加了時間,所以節省的時間會大大減少。此外,順序部分在每個時間步包括大量的計算,並在某個特定時間將數據寫入輸出文件。
在執行順序部分期間,所有處理器都運行並且數據在並行計算後被收集到根處理器,並且只允許根處理器寫入文件。
因此,任何人都可以提出什麼是計算並行代碼的串行部分(大量操作+寫入文件)的有效方法?如果需要,我還想澄清任何一點。
在此先感謝。
感謝Andy對你的迴應, – Vijay
正如你所猜測的那樣,順序部分是由大量的小任務(函數調用)組成的。但是,在評估並行部分的時間時,我也考慮了並行開銷(通信黑白線程)。但固有的順序部分是增加處理器花費更多時間。它是否應該與具有1個處理器的連續部件相同?你也可以從不同的線索寫更多的解釋你的意思。將這些塊組合起來肯定是一個很好的建議,並且會研究它。 – Vijay
我編輯了我的答案 –