100 раз всё перепроверил, и обнаружил, что внутренний цикл распараллеливается без проблем
Код:
for (i=0; i<sampl-1; i++)
{
x[i*sampl+i]=0.0;
#pragma omp parallel for num_threads(2)
for (j=i+1; j<sampl; j++)
{ printf ("iteration %d, thread=%d\n", i, omp_get_thread_num());
dv=max_norm(xyz+i*N_atom*3, xyz+j*N_atom*3, iel, N_atom, N_perm);
x[i*sampl+j]=sqrt((Sx[i]+Sx[j]-2*dv)/N_atom); x[j*sampl+i]=x[i*sampl+j];
}
}
все результаты выдаёт верные, работает судя по printf() на обоих ядрах
но проблема в том, что внутренний цикл параллелить невыгодно, т.к. слишком мелкие задачи,
из-за накладных расходов, общее время выполнения кода не уменьшается а только возрастает
Возникает резонный вопрос, что предпринять, чтобы корректно распараллеливался именно внешний цикл, а не внутренний?
-- 10.05.2024, 15:41 --p.s: правильно форматировать код не получается, писал в теге lang="С", но это ничего не даёт