原文:https://www.bearoom.xyz/2019/02/18/openmp2/web
OpenMP是由三部分組成的:指令、庫函數和環境變量。併發
#pragma omp 指令 [子句[子句]…]
指令有如下常見的11種:ide
子句有如下常見的幾種:svg
2.int omp_get_num_threads(void):返回當前線程數目。說明:若是在串行代碼中調用此函數,返回值爲1。函數
3.int omp_get_max_threads(void):若是在程序中此處遇到未使用 num_threads() 子句指定的活動並行區域,則返回程序的最大可用線程數量。說明:能夠在串行或並行區域調用,一般這個最大數量由omp_set_num_threads()或OMP_NUM_THREADS環境變量決定。oop
4.int omp_get_thread_num(void):返回當前線程id.id從1開始順序編號,主線程id是0。ui
5.int omp_get_num_procs(void):返回程序可用的處理器數。atom
6.void omp_set_dynamic(int _Dynamic_threads):啓用或禁用可用線程數的動態調整.(缺省狀況下啓用動態調整.)此調用隻影響調用線程所遇到的同一級或內部嵌套級別的後續並行區域。若是 _Dynamic_threads 的值爲非零值,啓用動態調整;不然,禁用動態調整。操作系統
7.int omp_get_dynamic(void):肯定在程序中此處是否啓用了動態線程調整。啓用了動態線程調整時返回非零值;不然,返回零值。線程
8.int omp_in_parallel(void):肯定線程是否在並行區域的動態範圍內執行。若是在活動並行區域的動態範圍內調用,則返回非零值;不然,返回零值.活動並行區域是指 IF 子句求值爲 TRUE 的並行區域。
9.void omp_set_nested(int _Nested):啓用或禁用嵌套並行操做。此調用隻影響調用線程所遇到的同一級或內部嵌套級別的後續並行區域。_Nested 的值爲非零值時啓用嵌套並行操做;不然,禁用嵌套並行操做。缺省狀況下,禁用嵌套並行操做。
10.int omp_get_nested(void):肯定在程序中此處是否啓用了嵌套並行操做.啓用嵌套並行操做時返回非零值;不然,返回零值,互斥鎖操做嵌套鎖操做功能。
11.void omp_init_lock(omp_lock_t * _Lock):
12.void omp_init_nest_lock(omp_nest_lock_t * _Lock):初始化一個(嵌套)互斥鎖。
13.void omp_destroy_lock(omp_lock_t * _Lock):
14.void omp_destroy_nest_lock(omp_nest_lock_t * _Lock):結束一個(嵌套)互斥鎖的使用並釋放內存。
15.void omp_set_lock(omp_lock_t * _Lock);
16.void omp_set_nest_lock(omp_nest_lock_t * _Lock);得到一個(嵌套)互斥鎖.
17.void omp_unset_lock(omp_lock_t * _Lock):
18.void omp_unset_nest_lock(omp_nest_lock_t * _Lock):釋放一個(嵌套)互斥鎖。
19.int omp_test_lock(omp_lock_t * _Lock):
20.int omp_test_nest_lock(omp_nest_lock_t * _Lock):試圖得到一個(嵌套)互斥鎖,並在成功時放回真(true),失敗是返回假(false)。
21.double omp_get_wtime(void):獲取wall clock time,返回一個double的數,表示從過去的某一時刻經歷的時間,通常用於成對出現,進行時間比較。 此函數獲得的時間是相對於線程的,也就是每個線程都有本身的時間。
22.double omp_get_wtick(void):獲得clock ticks的秒數。
一、OMP_SCHEDULE
僅適用於DO,PARALLEL DO(Fortran)和
(C / C ++)指令並行,它們的schedule子句設置爲RUNTIME。此變量的值肯定如何在處理器上調度循環的迭代。例如:
export OMP_SCHEDULE="guided, 4" export OMP_SCHEDULE="dynamic"
二、OMP_NUM_THREADS 設置執行期間要使用的最大線程數。例如:
``` export OMP_NUM_THREADS=8 ```三、OMP_DYNAMIC
啓用或禁用動態調整可用於執行並行區域的線程數。有效值爲TRUE或FALSE。例如
export OMP_DYNAMIC=TRUE
四、OMP_PROC_BIND
啓用或禁用綁定處處理器的線程。有效值爲TRUE或FALSE。例如:
export OMP_PROC_BIND=TRUE
五、OMP_NESTED
啓用或禁用嵌套並行性。有效值爲TRUE或FALSE。例如:
export OMP_NESTED=TRUE
六、OMP_STACKSIZE
控制建立(非主)線程的堆棧大小。例如
export OMP_STACKSIZE=2000500B export OMP_STACKSIZE="3000 k " export OMP_STACKSIZE=10M export OMP_STACKSIZE=" 10 M " export OMP_STACKSIZE="20 m " export OMP_STACKSIZE=" 1G" export OMP_STACKSIZE=20000
七、OMP_WAIT_POLICY
export OMP_WAIT_POLICY=ACTIVE export OMP_WAIT_POLICY=active export OMP_WAIT_POLICY=PASSIVE export OMP_WAIT_POLICY=passive
八、OMP_MAX_ACTIVE_LEVELS
控制嵌套活動並行區域的最大數量。此環境變量的值必須是非負整數。若是請求的OMP_MAX_ACTIVE_LEVELS值大於實現能夠支持的嵌套活動並行級別的最大數量,或者該值不是非負整數,則程序的行爲是實現定義的。例:
export OMP_MAX_ACTIVE_LEVELS=2 九、OMP_THREAD_LIMIT 設置要用於整個OpenMP程序的OpenMP線程數。此環境變量的值必須是正整數。若是請求的OMP_THREAD_LIMIT值大於實現能夠支持的線程數,或者該值不是正整數,則程序的行爲是實現定義的。例:
export OMP_THREAD_LIMIT=8
> 嫋嫋城邊柳, 青青陌上桑。 提籠忘採葉, 昨夜夢漁陽。 > *--張仲素 《春閨思》*