Итак, я делаю матрично-векторный продукт с использованием openMP, но я заметил, что он работает очень медленно.После нескольких попыток выяснить, в чем дело, я просто удалил весь код в параллельном разделе, и он все еще МЕДЛЕН.В чем тут может быть проблема?(n = 1000)
Вот результаты времени для 1, 2 и 4 ядер.
seq_method time = 0,001047194215062
parrallel_method (1) time = 0,001050273191140 seq - par = -0,000003078976079 seq / par = 0,997068404578433
2 241 0262 026 026 0260000 = 2 026 026 026 026 026 026 026 026 026 026 026 600seq - par = -0.000914798210943 seq / par = 0.533740192460558
parrallel_method (4) time = 0.004448095121916 seq - par = -0.003400900906854 seq / par = 0.235425319459132
когда код из 1014 * *1013* *параллельная секция - она не сильно меняется.
void parallel_method(float A[n][n], float B[n], float C[n], int thr_num)
{
double t1, t2;
float tmp = 0;
int i, j;
t1 = omp_get_wtime();
omp_set_dynamic(0);
omp_set_num_threads(thr_num);
#pragma omp parallel for private(tmp, j, i)
for (i = 0; i < n; i++) {
tmp = 0;
for (j = 0; j < n; j++) {
tmp += A[i][j] * B[j];
}
#pragma omp atomic
C[i] += tmp;
}
//////
t2 = omp_get_wtime();
if (show_c) print_vector(C);
par = t2 - t1;
printf("\nparrallel_method (%d) time = %.15f", thr_num, par);
printf("\nseq - par = %.15f", seq - par);
printf("\nseq/par = %.15f\n", seq / par);
}
Код: https://pastebin.com/Q20t5DLk