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