OpenMP中的常用函数
1、設置線程數目
其定義如下:
void omp_set_num_threads(int num_threads);
通過該函數來指定其后用于并行計算的線程數目,其中參數num_threads就是指定的線程數目。
2、獲取線程數目
其定義如下:
int omp_get_num_threads();
通過該函數可以獲取當前運行組中的線程數目,如果是在并行結構中使用該函數,其返回的就是現在并行計算中的所有的線程總數,如果是在串行中使用該函數,其返回值就為1。
3、獲取最多線程數目
其定義如下:
int omp_get_max_threads();
該函數將返回最多可以用于并行計算的線程數目。
4、返回線程ID
其定義如下:
int omp_get_thread_num();
通過該函數可以返回當前線程的ID,如果使用該函數時處于并行結構中,它返回的就是這個并行線程的ID,如果在串行中,就是返回主線程的ID。
5、獲取程序可用的處理器數目
其定義如下:
int omp_get_num_procs();
該函數將返回可用于程序的處理器數目(其實是線程數目)。
6、獲取時間
其定義如下:
double omp_get_wtime();
該函數返回為時鐘運行的時間,單位為s,如果現在時刻為11:40:30.8,則該值為11*3600+40*60+30.8=42030.8。在程序運行開始和即將結束時使用調用這個函數可以用于計算程序運行的時間。
7、是否處于并行中
其定義如下:
int omp_in_parallel();
omp_set_dynamic 函數
omp_set_dynamic?功能啟用或禁用線程數動態調整可用于并行區域的執行。?格式如下所示:
#include <omp.h> void omp_set_dynamic(int dynamic_threads);如果?dynamic_threads?計算為非零值,對于執行后續并行區域使用線程的數目可能由種運行時環境自動調整以最佳利用系統資源。?因此,用戶指定的線程的數目最大線程計數。?線程數在執行并行區域的團隊保持固定為該并行區域的持續時間以及由?omp_get_num_threads?函數報告。
如果?dynamic_threads?計算結果為 0,動態調整被禁用。
該函數具有中描述的效果頂部,在調用從?omp_in_parallel?函數返回零程序的一部分。?如果從?omp_in_parallel?函數返回非零值程序的一部分調用,此功能的行為未定義。
為?omp_set_dynamic?的調用在?OMP_DYNAMIC?環境變量的優先級。
線程的動態調整的默認實現中定義。?因此,依賴于線程的特定數字正確執行的用戶代碼應顯式禁用動態線程。?不需要實現能夠動態地調整線程數,但是,要求他們提供接口以便支持在所有平臺上的可移植性。
總體來說,調用omp_set_dynamic會覆蓋OMP_DYNAMIC環境變量的設置,其參數是一個int類型,這也是這個函數容易讓人誤解的地方之一。其實,其參數也是一個"bool"類型,和OMP_DYNAMIC的功能是一樣的,上面的MSDN描述可知,如果參數為非零值,線程組線程數量也是根據系統的資源狀態動態調整的,當然,在線程組執行一個并行區域的時候,其線程數量是固定的(fixed),這也是對“動態”容易造成的誤解,所以,“動態調整“并不是表示并行塊執行的過程中會動態變化線程組線程數量,而是在設置了”動態“之后,接下里的并行區域會根據系統的當前狀況進行判斷來分配合理的線程數量。
omp_get_dynamic函數用于獲取是否允許動態調整,其返回值為int類型,但是實際只會返回0和1兩個值之一。
(PS:不知道為什么openmp不規定omp_set_dynamic的參數類型為bool,可能是C里面沒有bool類型的原因?)
(3)例子:
[cpp]?view plaincopy
總結
以上是生活随笔為你收集整理的OpenMP中的常用函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 寻找影响免疫浸润细胞的基因(一)
- 下一篇: 大学排行榜 : qs全球世界 大学排行榜