【发布时间】:2018-04-05 11:55:43
【问题描述】:
我有一个 Python/Cython 应用程序,它使用 OpenMP 进行并行化,并多次调用英特尔 MKL。通常,我通过 OMP_NUM_THREADS=xx 确定线程数。当我使用 Anaconda 发行版(Python 3.6)运行我的脚本时,cython 脚本和 MKL(Pardiso 求解器调用)都正确启动了多个线程。在系统监视器中可以很好地看到 CPU 负载和加载的内核数。
但是,当使用系统 Python 发行版(Arch Linux 下的 Python 3.6)时,仅启动一个线程,用于 cython 模块和英特尔 MKL。
至少对于我的 cython 模块,我可以知道请求了正确数量的线程(通过 prange() ),但只获得了一个线程。
不会出现编译错误,当然标志“-fopenmp”用于编译。由于这个问题影响了我的 cython 模块和 Intel MKL,我认为它与我的系统 OpenMP 有某种关系。 这里有什么问题?谢谢!
【问题讨论】:
-
系统 python 也将使用系统 openmp、编译器、工具链等。因此可能存在不适用于 anaconda 的系统的全局
OMP_NUM_THREADS设置。尝试在运行 python 脚本时手动设置该环境变量。 -
没错,但这就是我已经做的:我通过 OMP_NUM_THREADS=... 设置环境变量。