Почему tbb::parallel_reduce выдает неверное значение

возникла проблема с tbb::parallel_reduce. Есть цикл для заполнения матрицы, в котором также нужно вычислить сумму всех коэффициентов матрицы. Проблема в том, что значения вычисленной суммы последовательной и параллельной реализаций не совпадают. В коде ниже проблем не вижу. Есть подозрение, что дело в настройках проекта, но не могу найти информацию по тому с чем именно это может быть связано.

#include <iostream>
#include <tbb/tbb.h>
#include <omp.h>
using namespace tbb;

int main()
{
    const int RHRW = 9;
    const double PI = atan(1.0) * 4;
    double matr_coef[RHRW * 2 + 1][RHRW * 2 + 1];
    double sum = 0.0;

    for (int y = -RHRW; y <= RHRW; y++)
    {
        for (int x = -RHRW; x <= RHRW; x++)
        {
            matr_coef[y + RHRW][x + RHRW] = (1.0 / (2.0 * PI * RHRW * RHRW)) *
                exp(-1.0 * (x * x + y * y) / (2.0 * RHRW * RHRW));
            sum += matr_coef[y + RHRW][x + RHRW];
        }
    }

    std::cout << sum << std::endl;

    double sum2 = tbb::parallel_reduce(
        tbb::blocked_range<int>(-RHRW, RHRW),
        0.0,
        [&](tbb::blocked_range<int> r, double running_total)
        {
            for (int y = r.begin(); y <= r.end(); y++)
            {
                for (int x = -RHRW; x <= RHRW; x++)
                {
                    matr_coef[y + RHRW][x + RHRW] = (1.0 / (2.0 * PI * RHRW * RHRW)) *
                        exp(-1.0 * (x * x + y * y) / (2.0 * RHRW * RHRW));
                    running_total += matr_coef[y + RHRW][x + RHRW];
                }
            }

            return running_total;
        }, std::plus<double>());

    std::cout << sum2 << std::endl;
}

Ответы (1 шт):

Автор решения: Sianez Sianez

Разобрался сам, оказалось, что parallel_reduce неправильно обрабатывал сравнение "<=", его заменил на "<" и в blocked_range расширил диапазон на единицу

→ Ссылка