gpt4 book ai didi

c openmp parallel for inside a parallel region

转载 作者:太空宇宙 更新时间:2023-11-04 00:51:51 28 4
gpt4 key购买 nike

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

例如,在我的并行区域内,我想在 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) 个线程?

最佳答案

这里有什么 - nested parallelism , 一个并行部分在另一个内部 - 大多数当前支持 OpenMP 的编译器都支持,但通常默认情况下关闭。您需要将 OMP_NESTED 环境变量设置为 TRUE,或者在您的程序中调用 omp_set_nested(1)。参见,例如 this answer .

要在评论中回答您的后续问题,您不需要在 OpenMP 并行 for 循环结束时设置障碍;除非你使用 nowait clause ,在 for 循环的末尾已经存在同步的隐式障碍。而且你不能在 for 循环的内部设置障碍;如果循环迭代没有被线程平均分配会怎样?您最终会遇到一些线程“卡住”在等待其他线程无法到达的屏障。

关于c openmp parallel for inside a parallel region,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15830526/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com