在Cython中使用parallel、prange或者OpenMP时,除了添加/openmp
编译参数,还需要将vcomp140.dll
拷贝到输出目录。
测试环境:Python3.7.4 + VS2019 + Cython0.29
大致步骤如下:
第一步:添加编译脚本。其中extra_link_args=['/openmp']
可以去掉,在编译时该参数会被忽略掉。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from distutils.core import setup
import numpy
from Cython.Build import cythonize
from Cython.Distutils import build_ext, Extension
# >python setup.py build_ext --inplace
# cython demo.pyx -a
ext_modules = [
Extension("demo",
["demo.pyx"],
include_dirs=[numpy.get_include()],
extra_compile_args=['/openmp'],
extra_link_args=['/openmp'],
)
]
setup(
name="openmp",
ext_modules=cythonize(ext_modules, force=True),
cmdclass={'build_ext': build_ext}
)
第二步:添加OpenMP运行库,在我的电脑里路径是C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Redist\MSVC\14.23.27820\x64\Microsoft.VC142.OpenMP\vcomp140.dll
,把vcomp140.dll
拷贝到输出目录即可。如果没有vcomp140.dll
文件,使用时会出现ImportError: DLL load failed: 找不到指定的模块。
错误。
注意以上两步,就可以启用OpenMP了。
版权声明:本文为「txfly」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.jianshu.com/p/b9f0a2604898