Распараллеливание метода Гаусса
Написал параллельную программу для решения СЛАУ методом Гаусса, но, видимо, распараллеливание не работает: время выполнения параллельной(на различном числе потоков) больше времени выполнения последовательной версии. Тестил на достаточно большом размере (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;
}