作者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