zl程序教程

您现在的位置是:首页 >  其他

当前栏目

OpenMP入门教程(二)reduce sum

入门教程 sum reduce
2023-09-14 09:09:31 时间

link

代码在git

#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,这样循环结束后