で関数なしで OpenMP を使用しているreduction(+ : sum)
場合、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 バージョンはシーケンシャル バージョンよりもさらに時間がかかります。
同じ理由と変更すべき点を知りたいです。