У меня есть код следующим образом:OpenMP: уменьшение суммы - неправильный результат, если не использовать + =
#include <stdio.h>
#include <omp.h>
#define N 10
double x[N];
int main(void)
{
double sum = 0.0;
#pragma omp parallel
{
#pragma omp for
for (int i = 0; i < N; ++ i)
x[i] = (double) i;
#pragma omp for reduction(+:sum)
for (int i = 0; i < N; ++ i)
{
sum += (double) x[i];
}
}
printf("%le\n", sum);
return 0;
}
Выход на 45, который имеет смысл. Однако, если я заменю sum += (double) x[i]
на sum = (double) x[i]
, выход будет всегда 43. Может ли кто-нибудь объяснить, почему это происходит?
Спасибо!
Назначение ('=') перезапишет старое значение. выражение 'a + = b' означает« читать a, добавить b и сохранять результат в « – sp2danny