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 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_get_dynamic函式用於獲取是否允許動態調整,其返回值為int型別,但是實際只會返回0和1兩個值之一。
(ps:不知道為什麼openmp不規定omp_set_dynamic的引數型別為bool,可能是c裡面沒有bool型別的原因?)
(3)例子:
[cpp]view plain
copy
#include
intmain(
intargc, _tchar* argv)
omp_set_dynamic(1000); // nonzero is ok!
printf("is dynamic: %d\n"
,omp_get_dynamic());
omp_set_num_threads(10);
#pragma omp parallel num_threads(5)
return
0;
}
分析上面的程式,來理解設定動態和不設定的差別,在4核cpu上執行的結果如下:
OpenMP中的常用函式
1 設定執行緒數目 其定義如下 void omp set num threads int num threads 通過該函式來指定其後用於平行計算的執行緒數目,其中引數num threads就是指定的執行緒數目。2 獲取執行緒數目 其定義如下 int omp get num threads 通過該函...
OpenMP中的常用函式
在openmp的runtime library中有一些常用的函式,有些函式已經在前面的例子中使用過,現在集中說明這些常用的函式以及用法。1 設定執行緒數目 其定義如下 voidomp set num threads int num threads 通過該函式來指定其後用於平行計算的執行緒數目,其中引...
openmp常用總結
執行時函式 win 10 vs2017 include intmain 並行結束,序列區域 return0 目的 接下來乙個區域內指令全部執行緒執行 理解 當執行緒執行到並行指令後,建立指定數目或者預設數目的執行緒並成為該組執行緒的主線程。當執行完並行區域後,只有主線程繼續執行。指令 paralle...