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