作者vul3u (等價交換)
看板Programming
標題[問題] OpenMP thread wait
時間Mon Dec 19 16:07:23 2011
由於時間緊迫需用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
1F:→ lucky17:把d=a+b+c;放在 omp parallel sections 外 218.168.1.13 12/19 22:03
2F:→ lucky17:的話,應該就會等所有thread join後才做@@ 218.168.1.13 12/19 22:04
3F:→ gilocustom:barrier?140.115.220.174 12/20 02:50
4F:→ vul3u:lucky17說的沒錯 140.123.121.58 12/20 15:44
5F:→ vul3u:原來是我之前不小心把d放在section裡 140.123.121.58 12/20 15:45