共用方式為


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 具有 以外的runtimeOMP_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

交叉參考