猿代碼openmp并行計(jì)算實(shí)戰(zhàn)
OpenMP編程模型以線程為基礎(chǔ),通過編譯制導(dǎo)指令制導(dǎo)并行化,有三種編程要素可以實(shí)現(xiàn)并行化控制,他們分別是編譯制導(dǎo)、API函數(shù)集和環(huán)境變量。
三、編譯制導(dǎo)
編譯制導(dǎo)指令以#pragma omp 開始,后邊跟具體的功能指令,格式如:#pragma omp 指令[子句[,子句] …]。
3.1 常用的功能指令
功能指令解析parallel用在一個(gè)結(jié)構(gòu)塊之前,表示這段代碼將被多個(gè)線程并行執(zhí)行for用于for循環(huán)語句之前,表示將循環(huán)計(jì)算任務(wù)分配到多個(gè)線程中并行執(zhí)行,以實(shí)現(xiàn)任務(wù)分擔(dān),必須由編程人員自己保證每次循環(huán)之間無數(shù)據(jù)相關(guān)性sections用在可被并行執(zhí)行的代碼段之前,用于實(shí)現(xiàn)多個(gè)結(jié)構(gòu)塊語句的任務(wù)分擔(dān),可并行執(zhí)行的代碼段各自用section指令標(biāo)出(注意區(qū)分sections和section)parallel sectionsparallel和sections兩個(gè)語句的結(jié)合,類似于parallel forsingle用在并行域內(nèi),表示一段只被單個(gè)線程執(zhí)行的代碼critical用在一段代碼臨界區(qū)之前,保證每次只有一個(gè)OpenMP線程進(jìn)入flush保證各個(gè)OpenMP線程的數(shù)據(jù)影像的一致性barrier用于并行域內(nèi)代碼的線程同步,線程執(zhí)行到barrier時(shí)要停下等待,直到所有線程都執(zhí)行到barrier時(shí)才繼續(xù)往下執(zhí)行atomic用于指定一個(gè)數(shù)據(jù)操作需要原子性地完成master用于指定一段代碼由主線程執(zhí)行threadprivate用于指定一個(gè)或多個(gè)變量是線程專用,后面會(huì)解釋線程專有和私有的區(qū)別