E. OpenMP C/C++ 中的實作定義行為
本附錄摘要說明此 API 中描述為「實作定義」的行為。 每個行為都會在主要規格中交叉參考回其描述。
備註
必須實作才能在這些情況下定義並記錄其行為,但這份清單可能不完整。
線程數目: 如果在停用線程數目的動態調整時遇到平行區域,而要求平行區域的線程數目大於運行時間系統可以提供的數目,則程式的行為是實作定義的(請參閱第 9 頁)。
在 Visual C++中,針對非巢狀平行區域,將提供 64 個線程(最大值)。
處理器數目: 任何指定時間實際裝載線程的實體處理器數目都是實作定義的(請參閱第 10 頁)。
在 Visual C++ 中,這個數位不是固定的,而且是由作業系統所控制。
建立線程小組: 執行巢狀平行區域的小組中的線程數目是實作定義的(請參閱第 10 頁)。
在 Visual C++ 中,此數位是由作業系統所決定。
schedule(runtime): 關於排程的決定會延遲到運行時間。 您可以藉由設定
OMP_SCHEDULE
環境變數,在運行時間選擇排程類型和區塊大小。 如果未設定此環境變數,則產生的排程為實作定義(請參閱第 13 頁)。在 Visual C++ 中,排程類型
static
沒有區塊大小。默認排程: 如果沒有 schedule 子句,預設排程是實作定義的(請參閱第 13 頁)。
在 Visual C++ 中,預設排程類型
static
沒有區塊大小。ATOMIC: 實作定義實作是否將所有指示詞取代
atomic
為critical
具有相同唯一名稱的指示詞(請參閱第 20 頁)。在 Visual C++中,如果不可部分完成修改的數據不在自然對齊上,或是長度為一或兩個字節,則滿足該屬性的所有不可部分完成作業都會使用一個重要區段。 否則,將不會使用重要區段。
omp_get_num_threads:如果使用者尚未明確設定線程數目,則預設值為實作定義(請參閱第 9 頁)。
在 Visual C++中,線程的預設數目等於處理器數目。
omp_set_dynamic:動態線程調整的預設值是實作定義。
在 Visual C++ 中,預設值為
FALSE
。omp_set_nested:啟用巢狀平行處理原則時,用來執行巢狀平行區域的線程數目是實作定義的。
在 Visual C++ 中,線程數目是由作業系統所決定。
OMP_SCHEDULE環境變數:此環境變數的預設值是實作定義的。
在 Visual C++ 中,排程類型
static
沒有區塊大小。OMP_NUM_THREADS環境變數:如果未為
OMP_NUM_THREADS
環境變數指定任何值,或指定的值不是正整數,或者如果值大於系統所能支持的線程數目上限,則要使用的線程數目是實作定義的。在 Visual C++中,如果指定的值為零或更少,則線程數目等於處理器數目。 如果值大於 64,則線程數目為 64。
-
在 Visual C++ 中,預設值為
FALSE
。