并行计算openmp累加计算结果为什么有时候都不一样?

源代码:#include<omp.h>#include<iostream>usingnamespacestd;voidmain(intargc,char*argv[]){... 源代码:
#include <omp.h>
#include <iostream>
using namespace std;

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

double sum1=0;

#pragma omp parallel
{
#pragma omp for
for(int j=0;j<100;j++)
{
sum1++;
}
}
cout<<"sum1="<<sum1<<endl;
}

for循环100次,如果是串行计算,毫无疑问,sum1的结果每一次都是100,可这里并行后(双核,4线程)有时候结果是100,有时候小于100,请解释一下这是为什么?
展开
 我来答
marine_marion
2011-12-29 · TA获得超过6823个赞
知道大有可为答主
回答量:1505
采纳率:0%
帮助的人:2740万
展开全部
我在 http://zhidao.baidu.com/question/359159497.html
不是回答过了么——需要用归约操作在每个进程中维持一个私有变量。

#pragma omp parallel for reduction(+:sum1)
for(int j=0;j<100;j++)
{
sum1++;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式