2013-01-17 52 views
0

我正在研究一個項目,我們被要求編寫一個簡單的OpenMP代碼來並行化一個可與微分方程一起工作的程序。我們還被要求在有和沒有編譯器優化的情況下測試代碼的性能。我與Sun CC編譯器的工作,所以對於optmized版本我使用的選項使用和不使用編譯器優化的並行OpenMP代碼的性能(Sun CC)

-xopenmp -fast 

和非優化

-xopenmp=noopt 

毫不奇怪的運行時間與編譯器的優化上是多少低於其他情況。令我驚訝的是,非優化版本的縮放性能要好得多。在這裏,性能指的是加速係數,即程序運行時間在M個處理器上的運行時間與在1個處理器上運行的程序運行時間的比率。

有人暗示,這可能取決於優化版本是內存綁定的事實,而非優化版本是CPU綁定的。我不確定「界限」如何影響我的代碼的擴展能力。你有什麼建議嗎?

回答

0

在大多數多處理器系統上,多個CPU內核共享一條內存路徑。給定的輸出二進制文件將具有一定的固有計算強度(每個字節的訪問計數)。當運行代碼的內核數量超過了支持它所需的內存帶寬時,它將停止使用其他內核進行擴展。爲了更好地瞭解如何推理這類問題,請查看「屋頂線模型」。

我期望從啓用優化中看到兩個變化。其中之一是如果優化提供任何類型的環路阻塞以減少存儲器訪問,則計算強度應該稍微增加。另一個原因是隨着更好地識別矢量化機會以及隨後的指令選擇和調度,原始操作率應該增加。這兩件事對縮放效率應該會產生相反的影響,但後者在你的情況下顯然占主導地位。