當我在使用OpenMP時沒有reduction(+ : sum)
函數時,OpenMP版本可以正常工作。OpenMP - 使用函數
#include <iostream>
#include <omp.h>
using namespace std;
int sum = 0;
void summation()
{
sum = sum + 1;
}
int main()
{
int i,sum;
#pragma omp parallel for reduction (+ : sum)
for(i = 0; i < 1000000000; i++)
summation();
#pragma omp parallel for reduction (+ : sum)
for(i = 0; i < 1000000000; i++)
summation();
#pragma omp parallel for reduction (+ : sum)
for(i = 0; i < 1000000000; i++)
summation();
std::cerr << "Sum is=" << sum << std::endl;
}
但是當我在一個全局變量調用函數summation
,OpenMP的版本正在更多的時間比串行版本。
我想知道相同的原因和應該作出的改變。