【发布时间】:2018-05-03 16:17:01
【问题描述】:
我有一个函数f,我可以使用并行处理。为此,我使用了 openmp。 但是这个函数被调用了很多次,而且好像每次调用都会创建线程。
我们如何重用线程?
void f(X &src, Y &dest) {
... // do processing based on "src"
#pragma omp parallel for
for (...) {
}
...// put output into "dest"
}
int main() {
...
for(...) { // It is impossible to make this loop processing parallel one.
f(...);
}
...
return 0;
}
【问题讨论】:
-
使用线程池。
-
我怎样才能在这段代码上做到这一点?
-
这是一个相当广泛的问题。在 general 中,您会预先创建多个线程,然后在可用时将工作分配给它们(并且池中有可用线程,否则您会将工作排队)。当一个线程完成其工作时,它会回到池中并等待分配更多工作。
-
非常感谢。您的建议是在这里使用 openmp 是不好的解决方案。对吗?
-
具有重复并行计算的使用模型非常适合 OpenMP,并且在实践中很常见。
标签: c++ multithreading openmp