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
交互參考
- 平行區域
- omp_set_dynamic函式
4.4 OMP_NESTED
除非 OMP_NESTED
藉由呼叫 omp_set_nested
連結庫例程來啟用或停用巢狀平行處理原則,否則環境變數會啟用或停用巢狀平行處理原則。 如果 OMP_NESTED
設定為 TRUE
,則會啟用巢狀平行處理原則。 如果 OMP_NESTED
設定為 FALSE
,則會停用巢狀平行處理原則。 預設值是 FALSE
。
範例:
setenv OMP_NESTED TRUE