繁体   English   中英

c openmp parallel 用于并行区域内

[英]c openmp parallel for inside a parallel region

我的问题是这样的一个 但我想做一些不同的事情......

例如,在我的并行区域内,我想在 4 个线程上运行我的代码。 当每个线程进入 for 循环时,我想在 8 个线程上运行我的代码。 就像是

#pramga omp parallel num_threads(4)
{
    //do something on 4 threads
    #pragma omp parallel for num_threads(2)
    for(int i=0;i<2;i++){
        //do something on 8 threads in total
    }
}

那么,有没有办法将每个(4)正在运行的线程“拆分”为两个(新)线程,以便在 for 循环内有更多(8)线程正在运行?

您在此处拥有的内容 - 嵌套 parallelism ,一个并行部分在另一个中 - 由大多数当前启用 OpenMP 的编译器支持,但默认情况下通常是关闭的。 您需要将OMP_NESTED环境变量设置为TRUE ,或者在您的程序中调用omp_set_nested(1) 参见,例如,这个答案

要在评论中回答您的后续问题,您不需要在 OpenMP 并行 for 循环末尾设置障碍; 除非你使用nowait子句,否则在你的for循环结束时已经有一个隐式的同步障碍。 你不能有内部的for循环的障碍; 如果循环迭代没有被线程平均划分会发生什么? 您最终会“卡住”一些线程,等待其他线程都无法到达的障碍。

是的,正确的方法是您选择的方法:第二个 for 循环将被每 4 个线程拆分,以便 8 个线程可以同时执行最内部的循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM