我正在开发一个同时使用粗粒度和细粒度多线程的应用程序。也就是说,我们手动管理线程池上大型工作单元的调度,然后在这些工作单元中,某些功能利用 OpenMP 进行更细粒度的多线程。
我们通过在成本最高的循环中选择性地使用 OpenMP 实现了收益,但担心会在我们将 OpenMP 块添加到成本更低的循环中时为 OpenMP 工作池创建争用。有没有办法向 OpenMP 发出信号,表明如果可用,代码块应该使用池,如果没有,它应该串行处理循环?
我正在开发一个同时使用粗粒度和细粒度多线程的应用程序。也就是说,我们手动管理线程池上大型工作单元的调度,然后在这些工作单元中,某些功能利用 OpenMP 进行更细粒度的多线程。
我们通过在成本最高的循环中选择性地使用 OpenMP 实现了收益,但担心会在我们将 OpenMP 块添加到成本更低的循环中时为 OpenMP 工作池创建争用。有没有办法向 OpenMP 发出信号,表明如果可用,代码块应该使用池,如果没有,它应该串行处理循环?