OpenMP入门教程(二)reduce sum
#include <iostream>
#include <math.h>
#include <omp.h>
using namespace std;
int main()
{
const int NUMBER = 100;
int* dataA = new int[NUMBER];
int* dataB = new int[NUMBER];
for (int i= 0; i < NUMBER; i++)
{
dataA[i] = i+1;
dataB[i] = 2*(i+1);
}
long double sum = 0.0;
omp_set_num_threads(4);
#pragma omp parallel for reduction(+:sum)
for (int i = 0; i < NUMBER; i++)
{
sum += dataA[i] + dataB[i];
}
cout<<sum<<endl;
delete [] dataA;
delete [] dataB;
return 0;
}
上面代码中我们首先开辟了2块的缓冲区,长度均为100个int,并且初始化为1,2,3100和2,4,6,8200。在并行段执行前,设置线程数为4。接下来是并行指令:
#pragma omp parallel for reduction(+:sum)
指令中#pragma omp parallel for上文已经讲了,而后面reduction(+:sum)起什么左右的呢?要解决这个问题,首先读懂for循环中代码,可以看出只不过是把dataA和dataB中的元素相加,然后赋值给sum,这样循环结束后