gpt4 book ai didi

python - 在 OSX 上使用 openMP 支持编译 cython

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:04 26 4
gpt4 key购买 nike

我使用的是安装了最新版本 xcode 的 OSX v10.11.6。所以我的默认编译器是 gcc,它实际上是 clang。我已经使用自制软件安装 gcc5,以便我可以使用 openMP,并且通过在我的 Makefiles 中为我的 C 源代码设置 CC := g++-5,我可以成功地编译 C 源代码与非-fopenmp 的简单用法。

我想做的是让 Cython 使用 gcc5 进行编译,这样我就可以使用 Cython 的原生 prange 功能,如最小示例所示 here .我在 this gist 中写了一个最小的例子, 借自 Neal Hughes 页面。当我尝试使用 setup.py 编译 omp_testing.pyx 时,我收到(可能不相关的)警告和 fatal error :

cc1plus: warning: command line option '-Wstrict-prototypes' is valid for C/ObjC but not for C++
omp_testing.cpp:1:2: error: #error Do not use this file, it is the result of a failed Cython compilation.
#error Do not use this file, it is the result of a failed Cython compilation.
^
error: command 'g++-5' failed with exit status 1

看完How to tell distutils to use gcc? ,我试图在 setup.py 中设置 CC 环境变量,但这没有用。我应该如何修改我的 Cython setup.py 文件以使用 g++-5 进行编译?

最佳答案

显然,Apple 早前放弃了对 OpenMP 的支持,因此,您无法使用标准 gcc 编译包含此依赖项的代码。解决这个问题的一个好方法是安装 LLVM 并使用它进行编译。这是对我有用的顺序:

安装 LLVM:

brew install llvm

将 OpenMP 标志 (-fopenmp -lomp) 包含到 setup.py 中:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize, build_ext


exts = [Extension(name='name_of_your_module',
sources=['your_module.pyx'],
extra_compile_args=['-fopenmp'],
extra_link_args=['-lomp']
)]

import numpy as np

setup(name = 'name_of_your_module',
ext_modules=cythonize(exts,
include_dirs=[np.get_include()],
cmdclass={'build_ext': build_ext})

然后用LLVM编译代码:

CC=/usr/local/opt/llvm/bin/clang++ python setup.py build_ext --inplace

这应该会产生一个并行化的 .so

关于python - 在 OSX 上使用 openMP 支持编译 cython,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41292059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com