gpt4 book ai didi

c - Openmp在并行内同步

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:33 24 4
gpt4 key购买 nike

我需要做这样的事情

#pragma omp parallel{

#pragma omp for
for_1(){

for_2(){
do_something();
}
#pragma omp barrier //wait for all threads to finish after the inner for

continue_with_something_else_in parallel();

}

}

编译器告诉我不能在那里设置障碍。有谁知道我该如何解决这个问题?

最佳答案

我知道这是一篇旧帖子,但既然我发现了它,其他人可能也会...

解决方案:

#pragma omp parallel
{

#pragma omp for schedule(static)
for_1() {
for_2() {
do_something();
}
}
// note implicit barrier after for construct

#pragma omp for shedule(static)
for_1() {
continue_with_something_else_in parallel();
}

}

说明:

OpenMP 在“ block ”中安排 for 循环并将它们分配给线程,这意味着在一个循环迭代中有一个 barrier 将是有问题的,因为 正在等待的线程 也可能被分配一些其他循环迭代,因此它将在死锁状态下等待自己。

但 OpenMP 标准确实保证如果您使用 schedule(static),则单个 parallel 主体中的相同线程会分配相同的循环迭代并可以共享内存高效,这就是我所做的。

关于c - Openmp在并行内同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13462222/

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