[問題] OpenMP thread wait

看板Programming作者 (等價交換)時間13年前 (2011/12/19 16:07), 編輯推噓0(005)
留言5則, 3人參與, 最新討論串1/1
由於時間緊迫需用OpenMP平行運算的功能 剛接觸OpenMP大概兩天 對所有指令還不是很熟 建立兩個thread分別給兩個cpu運算 兩個thread分別算出a跟b 目前我只會用section做 第一個section是算出a 第二個section是算出b 然後停止平行的thread做c=a+b 然後結束main 大概如下 #include <omp.h> #include <stdio.h> double a=0,b=0,c,d; void cal_a(){ //to do code } void cal_b(){ //to do code } void cal_c(){ //to do code } using namespace std; int main(){ c=cal_c(); #pragma omp parallel sections { #pragma omp section{ cal_a(); } #pragma omp section{ cal_b(); } } d=a+b+c; } 做了一些程式測試後猜測 section應該是任意指定硬體中的兩個thread分別給cpu執行 目前的問題是 我不知道如何等兩個thread都執行過了才執行d=a+b+c; 導致有時候b還沒執行,就執行d=a+b+c 或a還沒執行,就執行d=a+b+c 懇請OpenMP方面的高手可以幫我解答一下 謝謝OTZ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.121.58

12/19 22:03, , 1F
把d=a+b+c;放在 omp parallel sections 外
12/19 22:03, 1F

12/19 22:04, , 2F
的話,應該就會等所有thread join後才做@@
12/19 22:04, 2F

12/20 02:50, , 3F
barrier?
12/20 02:50, 3F

12/20 15:44, , 4F
lucky17說的沒錯
12/20 15:44, 4F

12/20 15:45, , 5F
原來是我之前不小心把d放在section裡
12/20 15:45, 5F
文章代碼(AID): #1Exl2zs0 (Programming)
文章代碼(AID): #1Exl2zs0 (Programming)