快速提问...我有以下代码:
void testingOMP()
{
#pragma omp parallel for
for(int i=0;i<5;i++)
{
#pragma omp single
cout << "During single: " <<omp_get_thread_num() << endl;
cout << "After single: " << omp_get_thread_num() << endl;
}
}
挂起,提供以下输出:
单身:1单身后:1后 单曲:单曲后:2D单曲: 0
1
我不得不按ctrl + c来阻止它。 单个工作共享指令确保只有一个线程在最后运行具有同步屏障的代码块。我认为这是问题,因为如果我使用master(不等待)或添加nowait程序不会挂起。
如果有人能告诉我为什么会发生这种情况,我将非常感激。
答案 0 :(得分:4)
实际上,将single
指令直接嵌套在for
指令中(反之亦然)是非法的。见https://computing.llnl.gov/tutorials/openMP/#BindingNesting