gpt4 book ai didi

c++ OpenMP每个循环中的多个线程

转载 作者:行者123 更新时间:2023-11-28 04:59:28 25 4
gpt4 key购买 nike

我有一个函数 myFunc(),它在内部使用 OMP 循环,但不会消耗我可用的所有内核。在更高层次上,我在一个循环中多次调用这个函数。有没有一种简单的方法可以在此外循环上使用 OMP,但又不将每个循环传递给单个线程?

例如:

// I have 24 cores
// Would like to allow each for loop pass to have 12 cores
for (int outIter=0; outIter<2; outIter++) {
x[outIter] = myFunc(...) // This function has OMP inside
}

最佳答案

你首先要搞清楚,为什么myFunc不能用完所有的24个核心。通常您会受到内存带宽的限制。话虽如此,上面的循环显然不是并行的。你必须尝试这样的事情:

#pragma omp parallel num_threads(2)
{
myFunc(...);
}

其中 myFunc 的输入是 omp_get_thread_num() 的函数。但同样,不要对能够实现更多并行性抱有希望。如果您的问题受到内存带宽的限制,则加速的希望很小。 myFunc 中大致发生了什么?

关于c++ OpenMP每个循环中的多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46430528/

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