C++并行程序開發(fā)簡介

前陣子用兩種方法實現(xiàn)了一個算法挨措,第一個方法只用CPU完成計算,第二個方法用到了GPU斩松。被運行結(jié)果嚇了一跳觉既,GPU比我單機(jī)CPU跑的程序快了一百倍。既然并行計算對性能的提升真不是蓋的钧椰,于是決定把CPU的程序也改成并行的演侯。今天簡單介紹一下Linux下用C++開發(fā)并行程序的方法背亥。

使用C++在Linux下開發(fā)并行程序要調(diào)用一個頭文件,它里面提供了很多實現(xiàn)并行運算的函數(shù)狡汉。調(diào)用它的方法就是在文件開頭添加:

#include

有了這個頭文件之后盾戴,就可以開始我們的C++并行化之旅了。

首先橄仆,我覺得有必要看看服務(wù)器上有多少個CPU盆顾。方法很簡單畏梆,pthread.h提供了一個函數(shù)叫sysconf(int),用它可以查看系統(tǒng)配置的參數(shù)。參數(shù)是_SC_NPROCESSORS_CONF的時候表示查看系統(tǒng)的CPU個數(shù)宪巨。于是我們可以寫這樣一個程序

#include”stdio.h”

#include”pthread.h”

int main(int argv, char* argc[])

{

cout<

return 0;

}

運行結(jié)果如下:

可以看出我用的服務(wù)器里面有32個CPU捏卓。給sysconf()傳其他的參數(shù)就可以查看系統(tǒng)相應(yīng)的參數(shù)天吓,有興趣可以網(wǎng)上搜一下各種參數(shù)的介紹。

需要注意一點,使用pthread.h的時候需要在編譯命令后面加–lpthread汤功,否則的話編譯器不能識別pthread.h里面的函數(shù),就像下面這樣:

我以前寫過一篇介紹Linux編程基本知識的帖子色解,如果對上圖中的命令不太理解的話可以參照一下餐茵。

pthread.h是利用函數(shù)實現(xiàn)多線程的:程序猿把需要線程完成的任務(wù)寫成到一個函數(shù)里忿族。如果直接運行這些函數(shù),那么他們?nèi)匀幌褚郧耙粯佣际琼樞驁?zhí)行的错英。但如果用pthread.h提供的方法去調(diào)用這個函數(shù)椭岩,它就會變成一個獨立的線程了璃赡。下面舉個栗子:

我們準(zhǔn)備寫兩個線程,第一個線程顯示十次:“我是一號線程”塌计,另一個線程顯示十次“我是二號線程”夺荒×颊簦可以想象,如果直接調(diào)用兩個函數(shù)剿吻,我們會看到十次“我是一號線程”丽旅,然后看到緊接著的十個“我是二號線程”。如果我們用pthread.h提供的方法調(diào)用他們會有什么效果呢榄笙?直接看運行效果:

多看幾次就更清楚了:

發(fā)現(xiàn)了吧帆卓,兩個線程的執(zhí)行順序是不確定的剑令。這就是并行計算的效果:各各線程之間獨立運行拄查,齊頭并進(jìn)“啵可以想象潮酒,如果能把一個大任務(wù)分解成若干獨立的小任務(wù)躯舔,然后使用并行計算的方法尊浪,運算速度將會大大提高桨螺。

現(xiàn)在解釋一下上面的例子是怎么實現(xiàn)的:

首先定義兩個函數(shù)脐嫂,task1和task2,他們是兩個線程的主體汞贸,然后在main函數(shù)里使用pthread.h提供的方法調(diào)用task1和task2。產(chǎn)生新線程的方法可以被比喻成放風(fēng)箏门驾。在放風(fēng)箏的時候奶是,我們通過一根線來控制風(fēng)箏,以防止它亂飛秆麸。同樣沮趣,我們也不希望產(chǎn)生的線程亂運行豁生,需要一根線來控制新的線程,pthread_t就是pthread.h提供給我們的控制線,它記錄新線程的編號迅脐。顧名思義谴蔑,pthread_create就是產(chǎn)生新線程的過程了。在上面的例子中窃躲,我們使用pthread_create把task1和task2變成了兩個獨立的線程钦睡,并用ThreadA和ThreadB記錄他們的線程號荞怒。pthread_join的意思是main函數(shù)在此等待ThreadA和ThreadB記錄的線程運行結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衰抑,一起剝皮案震驚了整個濱河市呛踊,隨后出現(xiàn)的幾起案子啦撮,更是在濱河造成了極大的恐慌逻族,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件要拂,死亡現(xiàn)場離奇詭異站楚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拉一,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蔚润,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尺栖,“玉大人,你說我怎么就攤上這事除盏〈煲裕” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵踱侣,是天一觀的道長泻仙。 經(jīng)常有香客問我量没,道長,這世上最難降的妖魔是什么殴蹄? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任袭灯,我火速辦了婚禮,結(jié)果婚禮上橘茉,老公的妹妹穿的比我還像新娘。我一直安慰自己擅腰,他們只是感情好翁潘,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布拜马。 她就那樣靜靜地躺著,像睡著了一般俩莽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上价淌,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音巷蚪,去河邊找鬼濒翻。 笑死,一個胖子當(dāng)著我的面吹牛有送,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播裸删,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼涯塔,長吁一口氣:“原來是場噩夢啊……” “哼清蚀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起榛搔,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤践惑,失蹤者是張志新(化名)和其女友劉穎童本,沒想到半個月后真屯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穷娱,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡泵额,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了篓叶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片羞秤。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俐镐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佩抹,我是刑警寧澤取董,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站枢里,受9級特大地震影響经窖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冰悠,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一溉卓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桑寨,春花似錦、人聲如沸爆阶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽故河。三九已至鱼的,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凑阶,已是汗流浹背衷快。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工烦磁, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留都伪,地道東北人积担。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像先誉,于是被迫代替她去往敵國和親的烁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容