包含 <omp.h>
OpenMP的指令有以下一些:
parallel,用在一個代碼段之前,表示這段代碼將被多個線程并行執行
for,用于for循環之前,將循環分配到多個線程中并行執行,必須保證每次循環之間無相關性。
parallel for, parallel 和 for語句的結合,也是用在一個for循環之前,表示for循環的代碼將被多個線程并行執行。
sections,用在可能會被并行執行的代碼段之前
parallel sections,parallel和sections兩個語句的結合
critical,用在一段代碼臨界區之前
single,用在一段只被單個線程執行的代碼段之前,表示后面的代碼段將被單線程執行。
flush,
barrier,用于并行區內代碼的線程同步,所有線程執行到barrier時要停止,直到所有線程都執行到barrier時才繼續往下執行。
atomic,用于指定一塊內存區域被制動更新
master,用于指定一段代碼塊由主線程執行
ordered, 用于指定并行區域的循環按順序執行
threadprivate, 用于指定一個變量是線程私有的。
OpenMP除上述指令外,還有一些庫函數,下面列出幾個常用的庫函數:
omp_get_num_procs, 返回運行本線程的多處理機的處理器個數。
omp_get_num_threads, 返回當前并行區域中的活動線程個數。
omp_get_thread_num, 返回線程號
omp_set_num_threads, 設置并行執行代碼時的線程個數
omp_init_lock, 初始化一個簡單鎖
omp_set_lock, 上鎖操作
omp_unset_lock, 解鎖操作,要和omp_set_lock函數配對使用。
omp_destroy_lock, omp_init_lock函數的配對操作函數,關閉一個鎖
OpenMP的子句有以下一些
private, 指定每個線程都有它自己的變量私有副本。
firstprivate,指定每個線程都有它自己的變量私有副本,并且變量要被繼承主線程中的初值。
lastprivate,主要是用來指定將線程中的私有變量的值在并行處理結束后復制回主線程中的對應變量。
reduce,用來指定一個或多個變量是私有的,并且在并行處理結束后這些變量要執行指定的運算。
nowait,忽略指定中暗含的等待
num_threads,指定線程的個數
schedule,指定如何調度for循環迭代
shared,指定一個或多個變量為多個線程間的共享變量
ordered,用來指定for循環的執行要按順序執行
copyprivate,用于single指令中的指定變量為多個線程的共享變量
copyin,用來指定一個threadprivate的變量的值要用主線程的值進行初始化。
default,用來指定并行處理區域內的變量的使用方式,缺省是shared
文章出處:
http://blog.csdn.net/drzhouweiming/archive/2006/08/28/1131537.aspxhttp://blog.csdn.net/drzhouweiming/archive/2006/09/04/1175848.aspx