并行计算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,请解释一下这是为什么? 展开
#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,请解释一下这是为什么? 展开
1个回答
展开全部
我在 http://zhidao.baidu.com/question/359159497.html
不是回答过了么——需要用归约操作在每个进程中维持一个私有变量。
#pragma omp parallel for reduction(+:sum1)
for(int j=0;j<100;j++)
{
sum1++;
}
不是回答过了么——需要用归约操作在每个进程中维持一个私有变量。
#pragma omp parallel for reduction(+:sum1)
for(int j=0;j<100;j++)
{
sum1++;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询