我想創建一個全局對象數組(每個可能的線程產生一個對象,由OpenMP
產生)並在整個程序中重用它。每個線程將使用omp_get_thread_num
來讀取其編號,並使用它來索引該數組。如何獲得在整個程序執行期間可能創建的OpenMP線程的最大數量?
如何獲得在整個程序執行期間可能創建的最大線程數OpenMP
?
的omp_get_max_threads
文檔說,這種功能被指定爲返回一個值,該值是特定於它被調用的特定平行區域
omp_get_max_threads
- 並行區域的最大線程數說明:返回不使用子句num_threads的當前並行區域使用的最大線程數。
鑑於對MSDN documentation措辭意味着由omp_get_max_threads
並行區域外返回的值是將在任何其它點被返回的值相同。
omp_get_max_threads
返回一個整數,它是等於或大於線程將是若無NUM_THREADS並行區域在代碼中的該點被定義可用的數量越大。
其中哪一個是正確的?
謝謝,所以我明白,如果我保證在程序中永遠不會調用'omp_set_num_threads',我可以依靠'omp_get_max_threads()'永不改變。對? –
實際上,是的。但嚴格遵循標準,這是實現定義的。自從OpenMP 3.1以來,'nthreads-var'是一個列表 - 而這些函數只涉及第一個元素。如果列表中有多個元素,則在嵌套區域中使用尾部。由於列表的初始化是實現定義的,因此實現可以像'[2,4]'一樣初始化列表。我懷疑/希望會發生。 – Zulan