在學習并行編程之前,你應(yīng)該知道進程、線程、主線程、從線程等基本概念。進程是一個大型應(yīng)用程序的基本單位,在任務(wù)管理器里進程都有一個名稱,后面跟隨的是與他有關(guān)的資源。線程是程序執(zhí)行的基本單位,它必須從屬與一個進程,一個進程可以有多個線程,同一個進程的線程可以共享進程的資源,例如他們可以引用同一個變量的值。一個進程一般會與一個.EXE文件關(guān)聯(lián),所以我把程序和進程不加區(qū)分。一個程序中有多個線程時,它必然會有一個主線程,主線程執(zhí)行完后,其它從線程也應(yīng)該結(jié)束執(zhí)行。
并行化編程一般可以理解為多個線程的創(chuàng)建和并行化編程,并行化編程的東西很多,但他們都會有兩個必須的規(guī)定:1、程序執(zhí)行模型。2、存儲模型。
程序執(zhí)行模型,他規(guī)定了并行化線程的執(zhí)行方式,規(guī)則,或者說邏輯結(jié)構(gòu)。openMP的執(zhí)行采用了Fork-Join模型。主線程在執(zhí)行過程中遇到要并行處理的部分,根據(jù)openMP的編譯指導語句來創(chuàng)建,執(zhí)行多個線程,創(chuàng)建的線程個數(shù)一般與計算機的核心數(shù)成正比,可以通過添加一個環(huán)境變量(OMP_NUM_THREADS)來規(guī)定創(chuàng)建線程的個數(shù),注意環(huán)境變量添加后要注銷或者重啟系統(tǒng)才會生效。
圖1 omp程序執(zhí)行模型
存儲模型,omp針對的是一個計算機或者分布式計算機的并行,在一臺計算機上他采用共享存儲的方式,多個線程共享一塊進程的內(nèi)存資源。
下面先寫個程序例子,能讓大家有個初步認識。這個程序是在VS2008中編譯的,項目類型為Win32ConsoleApplication。
例1、并行HelloWorld程序
#include <stdio.h>
#include "omp.h"
int main(int argc, char* argv[])
{
printf("Hello World! Serial Begin./n");
#pragma omp parallel //開始并行執(zhí)行
{ printf("Hello World! Parallel/n"); }
printf("Hello World! Serial again./n");
return 0;
}
此程序編譯之前,還需要你對你的編譯器項目屬性設(shè)置一下。這里我們以VS2008為例,首先設(shè)置項目支持openMP。右擊項目->屬性->C/C++->語言->openMP支持修改為是,如圖2所示,然后代碼生成修改為多線程調(diào)試,如圖3所示。執(zhí)行結(jié)果如圖4所示。
圖2、添加openMP支持
圖3、多線程調(diào)試支持
圖4、執(zhí)行結(jié)果
以上程序我并沒有設(shè)置環(huán)境變量,因為我的計算機是雙核的,所以他的并行部分輸出了兩行Hello World! Parallel,這說明他有兩個線程執(zhí)行并行部分,每個線程完全執(zhí)行了相同的一段程序。我們在設(shè)置一下環(huán)境變量后在執(zhí)行一下。順便說明一下怎樣設(shè)置環(huán)境變量。
計算機右擊-》屬性-》高級-》環(huán)境變量-》系統(tǒng)變量-》新建。。。如圖5所示。
圖5、Win7環(huán)境下設(shè)置環(huán)境變量
設(shè)置完環(huán)境后,注銷或重啟系統(tǒng)后,再次執(zhí)行例1的程序后得到的結(jié)果中 Hello World! Parallel 將被執(zhí)行四遍。因為你已經(jīng)設(shè)置了四個線程了。
到現(xiàn)在為止,大家可以模仿著例1寫幾個小程序了,可是還有一句話大家可能還不大明白吧,#pragma omp parallel這句話標記{}中的程序?qū)⒃贠MP_NUM_THREADS個線程中執(zhí)行。
在下面的幾篇文章中我將繼續(xù)講解openMP編程的基礎(chǔ)知識。歡迎繼續(xù)關(guān)注。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
