天天看點

6678_OpenMP學習筆記整理(三)——線程關聯性

OpenMP API 使用者指南:https://docs.oracle.com/cd/E57201_01/html/E58572/docinfo.html#scrolltoc

1、OMP_PLACES 和 OMP_PROC_BIND

這兩個環境變量通常結合使用

OMP_PLACES 用于指定線程将綁定到的計算機位置(硬體線程、核心或插槽)

OMP_PROC_BIND 用于指定綁定政策(線程關聯性政策),這項政策指定如何将線程配置設定到位置

OpenMP 4.0 還提供可在 parallel 指令中使用的 proc_bind 子句。proc_bind 子句用于指定如何将執行并行區域的線程組綁定到處理器

2、SUNW_MP_PROCBIND

SUNW_MP_PROCBIND 是特定于 Oracle 的傳統環境變量,用于指定處理器綁定

注 -  SUNW_MP_PROCBIND 的值為非負整數,表示邏輯硬體線程 ID,可能與實際硬體線程 ID 不同

SUNW_MP_PROCBIND 的可能值包括:

  • 大寫或小寫的字元串 FALSE、TRUE、COMPACT 或 SCATTER。例如:
    • setenv SUNW_MP_PROCBIND "TRUE"
                 
      • SCATTER – OpenMP 線程将綁定到彼此遠離的硬體線程上。此設定将為每個線程提供更多的記憶體帶寬。
      • COMPACT – OpenMP 線程将綁定到系統上盡可能靠近的硬體線程上。COMPACT 允許線程共享資料高速緩存,進而改進資料局域性。
      • TRUE – OpenMP 線程将以循環方式綁定到硬體線程。綁定的起始硬體線程由運作時庫根據性能最佳這一目标來确定。
      • FALSE – OpenMP 線程将不綁定到任何處理器。這是預設設定。
  • 非負整數 – 訓示 OpenMP 線程應綁定到的硬體線程的起始邏輯 ID。OpenMP 線程将以循環方式綁定到硬體線程,從具有指定邏輯 ID 的硬體線程開始,在綁定到邏輯 ID 為 n-1 的硬體線程之後,将繞回到邏輯 ID 為 0 的硬體線程
  • 包含兩個或更多個非負整數的清單 – OpenMP 線程将以循環方式綁定到具有指定邏輯 ID 的硬體線程。将不使用邏輯 ID 不在指定之列的硬體線程。
  • 由連字元 ("-") 分隔的兩個非負整數 – OpenMP 線程将以循環方式綁定到某一範圍内的硬體線程,該範圍以第一個邏輯 ID 開頭、以第二個邏輯 ID 結尾。第一個整數必須小于或等于第二個整數。将不使用邏輯 ID 不在指定範圍内的硬體線程。

如果為 SUNW_MP_PROCBIND 指定的值無效,或者如果給定的邏輯 ID 無效,将出現錯誤消息且程式将終止執行。

如果 OpenMP 線程數大于可用的硬體線程數,則對于某些硬體線程,将有多個 OpenMP 線程綁定到它們。這種情況可能會對性能有負面影響。

繼續閱讀