如何处理OpenMP线程池争用

时间:2010-04-21 21:27:08

标签: multithreading openmp

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

我们通过在最昂贵的循环中选择性地使用OpenMP来实现收益,但是我们担心在我们将OpenMP块添加到更便宜的循环时为OpenMP工作池创建争用。有没有办法向OpenMP发出信号,如果一个代码块可用,那么代码块应该使用该池,如果没有,它应该串行处理该循环?

2 个答案:

答案 0 :(得分:1)

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

for more info try this link

答案 1 :(得分:0)

您可以通过巧妙地使用omp_get_num_threads指令上的omp_set_num_threadsifnum_threads以及parallel条款来做您想做的事情。 OpenMP 3.0还提供了tasks,这可能很有用。