【发布时间】:2021-12-03 21:37:16
【问题描述】:
在 C++ Openmp 中,有人如何并行运行多个代码块,其中每个代码块都包含 omp single 和 omp for 循环? 更准确地说,我有 3 个功能:
block1();
block2();
block3();
我希望这 3 个函数中的每一个都并行运行。但是我不希望这些函数中的每一个都被分配一个线程。如果我希望他们每个人都使用一个线程,我可以将它们包含在三个“#pragma omp single nowait”中,最后是一个“#pragma barrier”。相反,这三个函数中的每一个都可能看起来像这样:
#pragma omp single
{
//some code here
}
#pragma omp for nowait
for(std::size_t i=0;i<numloops;i++)
{
//some code here
}
请注意,在上面的代码中,我需要在每个并行 for 循环之前执行一个 omp 单个区域。如果我没有这个限制,我可以简单地在“omp single”中添加一个“nowait”。相反,因为我有没有“nowait”的“omp single”,所以我不希望 block2() 必须等待 block1() 中的“omp single”区域完成。我也不希望 block3() 必须等待 block2() 中的“omp single”区域完成。有任何想法吗?谢谢
【问题讨论】: