共用方式為


4. 環境變數

本章描述控制平行程式碼執行的 OpenMP C 和 C++ API 環境變數(或類似的平臺特定機制)。 環境變數的名稱必須是大寫。 指派給他們的值不區分大小寫,而且可能有開頭和尾端空白字元。 程式啟動之後對值的修改會被忽略。

環境變數如下所示:

  • OMP_SCHEDULE 設定執行時間排程類型和區塊大小。
  • OMP_NUM_THREADS會設定在執行期間要使用的執行緒數目。
  • OMP_DYNAMIC啟用或停用執行緒數目的動態調整。
  • OMP_NESTED 啟用或停用巢狀平行處理原則。

本章中的範例只會示範如何在 Unix C 殼層 (csh) 環境中設定這些變數。 在 Korn 殼層和 DOS 環境中,動作類似:

csh:
setenv OMP_SCHEDULE "dynamic"

ksh:
export OMP_SCHEDULE="dynamic"

Dos:
set OMP_SCHEDULE="dynamic"

4.1 OMP_SCHEDULE

OMP_SCHEDULE僅適用于 for 具有排程類型的 runtimeparallel for 指示詞。 您可以在執行時間設定所有這類迴圈的排程類型和區塊大小。 將此環境變數設定為任何可辨識的排程類型和選擇性 chunk_size

對於 for 具有 以外的 runtime OMP_SCHEDULE 排程型別的 和 parallel for 指示詞,則會忽略 。 此環境變數的預設值為實作定義。 如果已設定選擇性 chunk_size ,則值必須是正數。 如果未 設定chunk_size ,則會假設值為 1,但排程為 static 時除外。 static針對排程,預設區塊大小會設定為迴圈反覆運算空間,除以套用至迴圈的執行緒數目。

範例:

setenv OMP_SCHEDULE "guided,4"
setenv OMP_SCHEDULE "dynamic"

交叉參考

4.2 OMP_NUM_THREADS

環境變數會 OMP_NUM_THREADS 設定執行期間要使用的預設執行緒數目。 OMP_NUM_THREADS 如果呼叫程式庫常式明確變更 omp_set_num_threads 該數位,則會忽略。 如果 指示詞上有 parallel 明確的 num_threads 子句,也會忽略它。

環境變數的值 OMP_NUM_THREADS 必須是正整數。 其效果取決於是否啟用執行緒數目的動態調整。 如需環境變數與執行緒動態調整之間 OMP_NUM_THREADS 互動的完整規則集,請參閱 2.3 節。

要使用的執行緒數目是實作定義的,如果:

  • OMP_NUM_THREADS未指定環境變數,
  • 指定的值不是正整數,或
  • 值大於系統可支援的執行緒數目上限。

範例:

setenv OMP_NUM_THREADS 16

交叉參考

4.3 OMP_DYNAMIC

OMP_DYNAMIC環境變數會啟用或停用平列區域執行可用執行緒數目的動態調整。 OMP_DYNAMIC 呼叫程式庫常式明確啟用或停用 omp_set_dynamic 動態調整時,會忽略。 其值必須是 TRUEFALSE

如果 OMP_DYNAMIC 設定為 TRUE ,執行時間環境可能會調整用於執行平列區域的執行緒數目,以充分利用系統資源。 如果 OMP_DYNAMIC 設定為 FALSE ,則會停用動態調整。 預設條件為實作定義。

範例:

setenv OMP_DYNAMIC TRUE

交叉參考

4.4 OMP_NESTED

除非 OMP_NESTED 藉由呼叫 omp_set_nested 程式庫常式來啟用或停用巢狀平行處理原則,否則環境變數會啟用或停用巢狀平行處理原則。 如果 OMP_NESTED 設定為 TRUE ,則會啟用巢狀平行處理原則。 如果 OMP_NESTED 設定為 FALSE ,則會停用巢狀平行處理原則。 預設值是 FALSE

範例:

setenv OMP_NESTED TRUE

交叉參考