并行内循环减慢了程序

时间:2018-05-13 11:01:23

标签: c performance openmp

我正在尝试将程序优化为实验。

当我并行化前两个外部循环(使用“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

0 个答案:

没有答案
相关问题