2011-07-28 21 views
3

我有一個使用mpi的C++代碼,並以順序並行序列模式執行。上述模式在時間循環中重複。 使用串行代碼驗證代碼時,我可以減少並行部分的時間,事實上,減少與處理器的數量幾乎成線性關係。
執行並行代碼的連續部分(大量操作+寫入文件)的有效方法?

我面臨的問題是,使用更高的處理器數量時,順序部分所需的時間也大大增加。

與整個程序的總順序時間相比,並行部分執行所需的時間更少。
因此,儘管在使用更多處理器時並行部分的時間減少,但由於執行順序部分時增加了時間,所以節省的時間會大大減少。此外,順序部分在每個時間步包括大量的計算,並在某個特定時間將數據寫入輸出文件。
在執行順序部分期間,所有處理器都運行並且數據在並行計算後被收集到根處理器,並且只允許根處理器寫入文件。
因此,任何人都可以提出什麼是計算並行代碼的串行部分(大量操作+寫入文件)的有效方法?如果需要,我還想澄清任何一點。

在此先感謝。

回答

0

首先,從單獨的線程(或MPI術語中的過程)進行文件寫入,以便其他線程可以使用您的核心進行計算。

然後,檢查爲什麼你的並行版本比順序慢得多。通常這意味着您創建的任務太小,因此線程之間的通信(同步)會影響您的性能。考慮是否可以將任務組合爲塊並完成並行處理的塊。

而且,當然,使用任何適合多線程環境的探查器。

[編輯]

順序部分=你的邏輯的一部分不能(並且不)平行的,你的意思是一樣的嗎?多核上的順序部分可以工作有點慢,可能是因爲OS調度器或類似的東西。奇怪的是你看到了明顯的差異。

磁盤是按順序排列的,因此從多個線程寫入磁盤並不會帶來任何好處,但會導致許多線程同時嘗試執行此操作並等待對方而不是執行某些有用操作的情況。

順便說一句,你使用什麼MPI實現?

您的問題描述太高級,提供一些僞代碼或類似的東西,這可以幫助我們來幫助你。

+0

感謝Andy對你的迴應, – Vijay

+0

正如你所猜測的那樣,順序部分是由大量的小任務(函數調用)組成的。但是,在評估並行部分的時間時,我也考慮了並行開銷(通信黑白線程)。但固有的順序部分是增加處理器花費更多時間。它是否應該與具有1個處理器的連續部件相同?你也可以從不同的線索寫更多的解釋你的意思。將這些塊組合起來肯定是一個很好的建議,並且會研究它。 – Vijay

+0

我編輯了我的答案 –

相關問題