【问题标题】:OpenMP: is there a timeout for a parallel section?OpenMP:并行部分是否有超时?
【发布时间】:2015-08-17 17:26:56
【问题描述】:

我在使用 OpenMP 时遇到了问题。有两个函数需要并行执行。在foo() 中有一个循环应该被stop 中断。如您所见,它是在另一个 OMP 部分中分配的。

代码是:

char stop;
#pragma omp parallel
{
    #pragma omp sections
    {
        #pragma omp section
        {
            foo(&stop);
        }
        #pragma omp section
        {
            bar();
            stop = getch();
        }
   }
}

void foo(char *foo) 
{
     while(*stop != 'q')
     {
        // do stuff
     }
}

现在当我执行该代码时会发生什么:它卡在第一个 (foo()) 部分。更具体地说,在给定的循环中 - 现在是一个无限循环,因为它永远无法切换到 bar 部分,因此永远无法调整中断条件。

现在一个简单的方法是让foo() 部分超时。我搜索了互联网,但找不到任何适用的代码。

有人有想法吗?

感谢您的建议!

【问题讨论】:

  • 为什么不在while循环中添加定时条件?
  • 源存储在 .dll 中
  • 意思是你有一个不能改变的库?
  • 正是我的奋斗目标
  • 您应该将foo 的参数标记为volatile,以防止编译器优化其使用:void foo (volatile char *stop)。另外,在getch 语句之后添加#pragma omp flush(stop)

标签: c++ parallel-processing timeout scheduled-tasks openmp


【解决方案1】:

OpenMP:并行部分是否超时?

答案:没有。

OpenMP 没有超时。

【讨论】:

  • 谢谢,我正在寻找解决办法。
猜你喜欢
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2013-04-12
  • 2015-12-22
相关资源
最近更新 更多