[英]OpenMP shared vs. firstprivate performancewise
我在類方法中有一個#pragma omp parallel for
循環。 每個線程只讀取幾個方法局部變量,很少調用私有數據和方法的參數。 所有這些都在shared
條款中聲明。 我的問題:
shared
或firstprivate
。 對? 明天我將嘗試描述我的代碼。 在此期間感謝您的建議!
嗯,他們不是一回事。 通過shared
,它們在所有線程之間共享。 使用firstprivate
,每個線程都獲得它自己的副本。 如果您只是閱讀變量,那么最好將其保留為shared
以避免復制它。 (在C ++中, firstprivate
將隱式調用復制構造函數。)
正確,多個線程讀取和寫入位於同一個高速緩存行上的值稱為假共享 。 高速緩存行將在訪問它的核心之間來回反彈 - 如果經常發生這種情況,可能會導致顯着減速。
如果您只是通過共享指針讀取數據,那么應該沒有問題。 但如果你也寫信,那么你需要確保你沒有競爭條件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.