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,请解释一下这是为什么? 展开
展开全部
你的#pragma omp parallel
{
#pragma omp for
for(int j=0;j<100;j++)
{
sum1++;
}
}
应该改成
#pragma omp parallel for reduction(+:sum1)
for(int j=0;j<100;j++)
{
sum1++;
}
我给过一个详细完整的例子说明“归约(reduction)”的用法,
参见:http://zhidao.baidu.com/question/146454227
{
#pragma omp for
for(int j=0;j<100;j++)
{
sum1++;
}
}
应该改成
#pragma omp parallel for reduction(+:sum1)
for(int j=0;j<100;j++)
{
sum1++;
}
我给过一个详细完整的例子说明“归约(reduction)”的用法,
参见:http://zhidao.baidu.com/question/146454227
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询