1

我正在开发一个同时使用粗粒度和细粒度多线程的应用程序。也就是说,我们手动管理线程池上大型工作单元的调度,然后在这些工作单元中,某些功能利用 OpenMP 进行更细粒度的多线程。

我们通过在成本最高的循环中选择性地使用 OpenMP 实现了收益,但担心会在我们将 OpenMP 块添加到成本更低的循环中时为 OpenMP 工作池创建争用。有没有办法向 OpenMP 发出信号,表明如果可用,代码块应该使用池,如果没有,它应该串行处理循环?

4

2 回答 2

1

您可以使用 omp_set_num_threads(int) 设置否。池内的线程数。然后,如果可能,编译器将尝试创建一个线程池并安排它们。如果无法创建池,那么它将创建尽可能多的线程并以串行方式运行其他线程。

有关更多信息,请尝试此链接

于 2011-05-04T06:02:29.433 回答
0

您可以通过巧妙地使用指令中的omp_get_num_threadsomp_set_num_threadsifandnum_threads子句来做您想做的事情。parallelOpenMP 3.0 还提供了tasks哪些可能有用。

于 2010-04-21T22:06:17.197 回答