OpenMP程序在开始循环之前冻结了吗?

时间:2015-08-12 14:55:49

标签: openmp

我有一个程序我试图使用OpenMP并行化 - 它对一些数据进行了非常大的循环。由于递增一个共享变量(因此我可以报告进度)是一个问题,我认为我将循环分解为更小的块,循环多次,并在最后报告状态/ openmp循环外部。

问题是,在OpenMP for循环第3次启动之前,程序会锁定。只是坐在那里,什么都不做。除了最简单的代码之外,我已经删除了所有代码。这是:

  some other variable declarations for removed code above here 
  int dbl = 0;
  int lasttime = 0;
  int seedbase = 0;
  const char *pl = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  const double mm = 62.0 / 2147483647.0;

  for(dbl = 0; dbl < 2048 && !abort; dbl++) {
    seedbase = dbl; //(dbl * 2097152) - 2147483648;
    printf("Loop %d %d\n", dbl, abort);
#pragma omp parallel for private(seed) shared(dbl)
    for(seed = 0; seed < 20971; seed++) {  //52
      if(dbl == 2)
        printf("oo\n"); 
    }
    if(abort)
      break;
    lasttime = time();
    hps = (double)((dbl*2097152) * clk_tck) / (double)((times(&tms) - start_time));
    printf("So far: %0.2fsec (%0.2fhps) %0.2f sec left\n", (double)(times(&tms) - start_time) / (double)clk_tck, hps, (((long)1 << 32) - (dbl * 2097152)) / hps);
  }
}

编译运行时,我得到:

Loop 0 0
So far: 0.02sec (0.00hps) inf sec left
Loop 1 0
So far: 0.02sec (104857600.00hps) 40.94 sec left
Loop 2 0
^C

循环0开始,openmp运行(并且什么都不做)然后退出,&#34;到目前为止:&#34;打印出来。

循环1开始,同样的事情。

循环2开始,一切都挂起。 printf(&#34; oo&#34;);永远不会发生如果我将行更改为if(dbl&lt; = 2),则当循环运行时,我的屏幕将填充循环&#34; oo&#34;&#34;&#39;

但在种子循环第三次发生之前 - 它已经死了。只是坐在那里咀嚼CPU时间无所事事。

你能不能快速循环一个openmp循环?这是问题吗?我觉得很奇怪它总是在第3次运行之前停止,不管种子循环中的代码有多复杂(我删除了200行代码 - 它没有效果)

0 个答案:

没有答案