簡體   English   中英

性能方面的OpenMP共享與firstprivate

[英]OpenMP shared vs. firstprivate performancewise

我在類方法中有一個#pragma omp parallel for循環。 每個線程只讀取幾個方法局部變量,很少調用私有數據和方法的參數。 所有這些都在shared條款中聲明。 我的問題:

  • 性能明智不應該有任何區別聲明這些變量是sharedfirstprivate 對?
  • 如果我不小心讓變量不共享同一個緩存行,那是否也是如此?
  • 如果其中一個共享變量是指針並且在線程內部我通過它讀取了一個值,是否存在像普通循環中的別名問題?

明天我將嘗試描述我的代碼。 在此期間感謝您的建議!

  1. 嗯,他們不是一回事。 通過shared ,它們在所有線程之間共享。 使用firstprivate ,每個線程都獲得它自己的副本。 如果您只是閱讀變量,那么最好將其保留為shared以避免復制它。 (在C ++中, firstprivate將隱式調用復制構造函數。)

  2. 正確,多個線程讀取和寫入位於同一個高速緩存行上的值稱為假共享 高速緩存行將在訪問它的核心之間來回反彈 - 如果經常發生這種情況,可能會導致顯着減速。

  3. 如果您只是通過共享指針讀取數據,那么應該沒有問題。 但如果你也寫信,那么你需要確保你沒有競爭條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM