Параллельный внутренний цикл замедляет программу - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь оптимизировать программу как эксперимент.

Когда я распараллелил первые два внешних цикла (с «it» и «i»), я увидел существенную разницу во времени выполнения.Но когда я попытался распараллелить внутренний цикл, программа стала работать намного медленнее, чем последовательная.Я также пытался использовать сокращение, но результат был тот же.

Это то, чего я должен ожидать, или я допустил ошибку при распараллеливании?

Когда я использую предложение "nowait", оно работает быстрее, чем два предыдущих распараллеливания.

#pragma omp parallel private(it,i,j) firstprivate(u,sigma,dt,mu)
{
for (it = 0; it < itime; it++) {

  for (i = 0; i < n; i++) {
    sum = 0.0;


    #pragma omp for schedule(static)
    for (j = 0; j < n; j+=1) {

      sum += sigma[i * n + j] * (u[j] - u[i]);
    }

    #pragma omp atomic write
   uplus[i]= (u[i] + dt * (mu - u[i])) + dt * sum / divide;

    if (u[i] > uth) {
      #pragma omp atomic write
      uplus[i] = 0.0;

      if (it >= ttransient) {
        #pragma omp atomic
        omega1[i] += 1.0;
      }
   }
}

}//omp end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...