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