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