為什麼用OpenMP平行計算會出現比單執行緒還要慢?該怎樣正確使用OpenMP?

時間 2021-12-21 00:47:25

1樓:風起花散

我曾經遇到過三種:一種是由於各個執行緒之間有共享的需要寫入的乙個變數,並行的時候發生了衝突。解決方法應該是對共享的變數加鎖。

第二種就是上面所說的對於共享的變數加鎖,不過我用的是atomic原子操作測試的,而且迴圈體內就這一條語句,貌似是乙個迴圈裡面就一條相加的語句。這個程式邏輯上根本不是並行的,強行並行化+原子操作好像也會造成比單核慢。

第三種是巢狀迴圈,內層迴圈並行。並行執行緒的建立與銷毀會有開銷,在巢狀迴圈的時候如果對內層for並行的話,這個開銷會很大。解決方法是把並行放在外層的for。

以上三種情況基本上都不是優化不好的範疇,而是根本就是出錯的範疇。寫下來給新上手的同學參考一下。當年我第一次小心翼翼的加上pragma omp for的時候發現比單核慢了好多,那時候真心是懵逼的……

2樓:yzcj105yzcj105

1.各個thread負載不均衡造成先算完的thread在等沒算好的。解決:

用dynamic,guided代替static,代價:overhead,也就是動態排程時間會上去,當然對於本身迴圈體內運算大的程式來說,這個可以不計。對於可以nowait的地方盡量用。

2.公有變數在thread中有update,這時numa架構要求cache與主記憶體不斷地重新整理。解決方案:盡量用private

會滑板有什麼用?

kon 實用價值基本沒有 這玩意就是籃球一樣,自己玩著開心,和同好玩著開心。打籃球有啥實用性?能達到靠打籃球混飯吃麼?吸引異性?技術好到一定程度,就是踢毽子都吸引眼球的。代步?用滑板代步實在不理智,侷限性太多。路面要求也高。危險也大。雖然我用滑板代步,但是固定路線,有自行車道,有園區道路,風險相對小...

你為什麼用黑莓?

肥肉終結者 我是西門子Palm到黑莓的 黑莓水貨沒有bis或者bes服務,就用edge資料上網,bold的全鍵盤和快捷鍵用著爽,還猛刷過一陣推特 Martin 黑莓7290,當年上學用它的全鍵盤,記錄老師口述的內容,竟然全部記下了,一直用來做記錄,Sunny屏很好用,後來出現斷網情況,就沒有再用了。...

你為什麼用鋼筆?

窮酸文人zsp 我用過很多鋼筆,最喜歡這支暗尖爛筆頭3059。透過透明筆蓋看到短小的筆尖閃著銀光,就像荊軻刺秦王圖窮而匕首見,洩露出半寸殺機,就像古代將軍挺槍上馬,槍頭上映著月光,像給喜歡的女生寫信,絞盡腦汁後的一句衷腸,像春天的小麥剛剛刺破土壤。肥胖的筆身盛滿墨水,浸泡著不知哪個夜晚噴薄而出的哀傷...