繁体   English   中英

C ++ OpenMP每个循环中有多个线程

[英]c++ OpenMP multiple threads in each loop

我有一个函数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大概会发生什么?

暂无
暂无

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

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