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

时间:2017-09-26 15:32:00

标签: c++ multithreading

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

e.g:

// 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
}

1 个答案:

答案 0 :(得分:1)

您应该首先了解为什么myFunc不能耗尽所有24个核心。通常,您受内存带宽的限制。话虽如此,上述循环显然不是平行的。你必须尝试这样的事情:

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

其中myFunc的输入是omp_get_thread_num()的函数。但同样,不要希望能够实现更多的并行性。如果您的问题受到内存带宽的限制,那么加速几乎没有希望。大概在你身上发生了什么myFunc