确保在Mac Pro上使用MKL库的numpy。

25
我正在使用Enthought的Canopy/EPD版本的Python,其中包含链接到MKL的numpy。我目前在我的工作电脑(Windows 7、四核i5 @ 3.33 Ghz、4 GB内存)和家用工作站(Mac Pro 3.1、Ubuntu 12.04、2个2.8 Ghz四核Xeon、6 GB内存)上并行运行一组模拟。
但是当我对模拟进行基准测试时,它们在工作电脑上运行得更快(每次迭代35秒,而在Mac Pro上则需要60秒)。问题在于核心之间完全平衡(尴尬的并行问题),因此我怀疑linux工作站上的MKL库存在问题。有没有一种方法可以验证Python实际上是否使用了MKL库。我已经阅读了一些线程,说可以检查Python是否链接到它,但这并不能确保它构建正确并且实际上正在使用。

1
scipy.show_config() 不是你要找的吗?不确定这是否算作“确保”它实际被使用。 - askewchan
当我输入时,所有的“library_dirs”和“include_dirs”都显示为:“/home/vagrant/src/master-env/...”。这正确吗(我的用户帐户不是“vagrant”,当我检查该文件夹时,它不存在)?这个字段很重要吗,还是没有使用?库正确报告“mkl_lapack95_lp64”等。 - user1554752
1个回答

31
>>> numpy.show_config()

您将会看到类似这样的输出,表明MKL已经被链接。

lapack_opt_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
blas_opt_info:
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
openblas_info:
NOT AVAILABLE
lapack_mkl_info:
    libraries = ['mkl_lapack95_lp64', 'mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
blas_mkl_info:
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']
mkl_info:
    libraries = ['mkl_intel_lp64', 'mkl_intel_thread', 'mkl_core', 'mkl_mc', 'mkl_mc3', 'pthread']
    library_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../lib']
    define_macros = [('SCIPY_MKL_H', None)]
    include_dirs = ['/Users/vagrant/src/master-env/Resources/Python.app/Contents/MacOS/../../../../include']

关于您的根本问题,您是否考虑过物理核心与逻辑核心之间的区别?您可以尝试调整环境变量MKL_NUM_THREADS以避免可能的抖动。 - Jonathan March
我会再次审查,但我正在进行的操作不是多线程的(大量使用 add(), multiply()等,但没有使用 dot())。另外,我不确定为什么在 XEON 上会有问题,而在 i5 上没有问题。 - user1554752
这些路径是硬编码列表,您可以在__config__.py中找到,但不一定是numpy使用的路径。 - Fnord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接