gpt4 book ai didi

Python 和 OpenMP C 扩展

转载 作者:IT老高 更新时间:2023-10-28 22:12:34 26 4
gpt4 key购买 nike

我有一个 C 扩展,我想在其中使用 OpenMP。但是,当我导入模块时,出现导入错误:


ImportError: /home/.../_entropysplit.so: undefined symbol: GOMP_parallel_end

我已经用 -fopenmp 和 -lgomp 编译了模块。这是因为我的 Python 安装没有使用 -fopenmp 标志编译吗?我必须从源代码构建 Python 吗?或者还有其他的可能吗?这是我唯一一次在我的模块中实际使用 openmp:


unsigned int feature_index;
#pragma omp parallel for
for (feature_index = 0; feature_index < num_features; feature_index++) {

如果可能的话,我想坚持使用 openmp,因为它非常简单,而且这种情况下的并行化非常适合它。

编辑:我硬着头皮重新编译了支持 OpenMP 的 Python。我的模块现在可以完美运行,但这并不是一个很好的解决方案。如果它需要完全重新编译 Python,我无法真正分发它。那么有人知道解决这个问题的方法吗?也许 ctypes 会起作用吗?

已解决!这是一个简单的链接问题。 (我为此重建了 Python?!)在模块编译期间未正确链接 OpenMP。因此,IS可以加载使用 OpenMP 的 C Python 扩展。

最佳答案

为了更清楚,你的 setup.py 应该是这样的:

ext = Extension(
'milk.unsupervised._som',
sources = ['milk/unsupervised/_som.cpp'],
extra_compile_args=['-fopenmp'],
extra_link_args=['-lgomp'])


...
setup(..., ext_modules = [ext])

关于Python 和 OpenMP C 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572580/

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