我有一个Python/Cython应用程序,它是使用OpenMP并行化的,它对英特尔MKL进行了多次调用。通常,我通过OMP_NUM_THREADS=xx确定线程的数量。在系统监视器中可以很好地看到CPU负载和加载的内核数量。
但是,当使用系统Python分发版( Arch Linux下的Python 3.6 )时,对于cython模块和英特尔MKL,只启动一个线程。
至少对于我的cython模块,我可以判断出请求的线程数是正确的(通过prange() ),但只获得了一个线程。
没有出现编译错误,当然也使用了'-fopenmp‘标志进行编译。由于该问题既影响我的cython模块,也影响英特尔MKL,我假设它与我的系统OpenMP有某种关系。这里的问题是什么?谢谢!
发布于 2018-04-11 03:04:18
尝试在循环之前指定代码内的线程数,以防OMP_NUM_THREADS
在外部某处被覆盖,例如
import openmp
openmp.omp_set_num_threads(NumThreads)
# parallel loop here
https://stackoverflow.com/questions/49671780
复制相似问题