有没有办法在运行时确定当前的OpenMP线程池大小是多少?
我指的是OpenMP产生但尚未获得的实际线程数,不是允许的最大线程数(omp_get_num_procs
),也不是默认情况下将使用的线程数。一个新的并行区域(omp_get_num_threads
)。
动机:我有一个Python库,可以为某些计算分配子进程,包括一些通过扩展模块在引擎盖下使用OpenMP的库。如果有人在分叉之前调用任何基于OpenMP的函数,则该过程将停止。这是因为OpenMP isn't fork-safe:如果使用fork
并且在使用OpenMP功能后使用#34},则进程将挂起。"我希望这个分叉库能够自动检测是否为时已晚,因为已经使用了OpenMP功能。在这样的检测中,它将引发异常而不是继续和挂起。想到的最佳方法是检测OpenMP线程池是否已经启动,并且不清楚最好的方法是什么。归结为pstack
并抓取libgomp.so
的堆栈跟踪感觉太过苛刻,我不知道它是否适用于其他OpenMP实施,如英特尔。