Распараллеливание метода Гаусса

Написал параллельную программу для решения СЛАУ методом Гаусса, но, видимо, распараллеливание не работает: время выполнения параллельной(на различном числе потоков) больше времени выполнения последовательной версии. Тестил на достаточно большом размере (2500х2500). Не пойму в чем проблема. (Распараллелить нужно именно обратный ход).

double* Gauss_parallel(double* b, double** m, int n)
{
    double* y = new double[n];
    int i, j, k;
    double koef;

    ////////// Инициализируем вектор у нулями ////////////////////////////////////////////////////
    for (int i = 0; i < n; i++)
        y[i] = 0;

    ////////// Приведем матрицу к треугольному виду, а также преобрауем вектор b /////////////////
    for (i = 0; i < n - 1; i++)
    {
#pragma omp parallel for private (j, k, koef) num_threads(8)
        for (j = i + 1; j < n; j++)
        {
            double koef = m[j][i] / m[i][i];
            b[j] -= b[i] * koef;
            for (k = i; k < n; k++)
                m[j][k] -= m[i][k] * koef;
        }
    }

    /////////////////////////////////////////////////////////////////////////////////////////////
    ////////// Решаем систему методом Гаусса ////////////////////////////////////////////////////
    clock_t start = clock();
    for (int i = n - 1; i >= 0; i--)
{
#pragma omp for private(j)
        for (j = i + 1; j < n; j++)
            y[i] += m[i][j] * y[j];
        y[i] = (b[i] - y[i]) / m[i][i];
    }
    clock_t end = clock();
    cout << "\nParallel computing time is " << (double)(end - start) / CLOCKS_PER_SEC << " seconds" << endl;
    return y;
}

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