我有一個程序,它利用了OpenMP的優勢,以獲得一個雙CPU總共32個核心服務器的巨大加速。我正在使用的輸入參數不允許完全加載CPU。OpenMP內存訪問和性能下降
今天一些內核被另一個程序100%加載。當我啓動我的程序時,即使CPU的負載像往常一樣高(〜2500%),速度非常慢。我刪除了並行指令,我注意到一些性能改進。
這可能是由於內存帶寬有限嗎?我如何進一步調查問題並最終改進我的代碼?
我有一個程序,它利用了OpenMP的優勢,以獲得一個雙CPU總共32個核心服務器的巨大加速。我正在使用的輸入參數不允許完全加載CPU。OpenMP內存訪問和性能下降
今天一些內核被另一個程序100%加載。當我啓動我的程序時,即使CPU的負載像往常一樣高(〜2500%),速度非常慢。我刪除了並行指令,我注意到一些性能改進。
這可能是由於內存帶寬有限嗎?我如何進一步調查問題並最終改進我的代碼?
不一定會降低性能的內存訪問。如果你使用靜態調度(通常是默認),循環被分成分配給線程的塊。 如果線程綁定到已經處於忙碌狀態的內核,將顯着降低運行時性能。 如果您在不能保證成爲資源唯一用戶的環境中運行,那麼通過動態調度可以獲得更好的性能。
如果沒有指定的調度類型,與
OMP_SCHEDULE=dynamic ./my_program
運行程序,並看看是否有幫助。
感謝您的回覆,這聽起來很有趣。 (聯合國)幸運的是,今天服務器幾乎卸載。我會盡快嘗試有機會。 – DarioP
它可能是內存問題或因爲「其他程序」加載一些CPU,但顯示您的代碼,並執行真正的措施多少內存/ CPU,執行時間您的程序使用! – alexbuisson