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
具有排程類型的 runtime
和 parallel 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"
交叉參考
- for 指示詞
- parallel for 指示詞
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
交叉參考
- num_threads 子句
- omp_set_num_threads 函式
- omp_set_dynamic 函式
4.3 OMP_DYNAMIC
OMP_DYNAMIC
環境變數會啟用或停用平列區域執行可用執行緒數目的動態調整。 OMP_DYNAMIC
呼叫程式庫常式明確啟用或停用 omp_set_dynamic
動態調整時,會忽略。 其值必須是 TRUE
或 FALSE
。
如果 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