python - 用并行化的 C 程序扩展 Python(在 OMP 下)

标签 python c parallel-processing openmp

因此,我正在考虑对我已有的 python 组件进行 C 扩展。然后,我想到使用 OMP 尽可能多地利用最终将运行 Python+C 组合解决方案的机器。

有没有人尝试过类似的东西?是否有任何特殊的、不吉利的细节会导致这样的解决方案失败?

提前致谢!

最佳答案

我已经成功完成了射电天文学中的大型数据挖掘任务。参见 https://github.com/ewanbarr/sigpyproc.git举个例子。

需要注意的是,我在这些案例中构建的 C 库是通过 ctypes 访问的,而不是作为 native Python 扩展访问的。

所以,例如:

Python: 测试.py

import ctypes as C
import numpy as np
from numpy.ctypeslib import as_ctypes
lib = C.CDLL("libmytest.so")

def set_N_threads(nthreads):
    self.lib.omp_set_num_threads(nthreads)

def do_some_task(input_array):
    input_array = input_array.astype("float32")
    output_array = np.empty_like(input_array)
    lib.do_some_omp_task(as_ctypes(input_array),
                         as_ctypes(output_array),
                         C.c_size_t(input_array.size))
    return output_array

C: 测试.c

#include <omp.h>

void do_some_omp_task(float* input_array,
                      float* output_array,
                      size_t size)
{
   int ii;
#pragma omp parallel for default(shared) private(ii)
   for (ii=0;ii<size;ii++)
       do something using ii and the arrays
}

编译:

gcc -O3 -lm -fopenmp -fPIC -c test.c -o test.o
gcc -shared -lgomp -o libmytest.so test.o

为了回答您的问题,我对这种设置没有任何问题,并且可实现的速度改进令人印象深刻(尽管上面的示例不会真正受益于 OMP)

关于python - 用并行化的 C 程序扩展 Python(在 OMP 下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13839358/

相关文章:

Python:使用 ctypes 的多维数组?

c - 在c中使用指针相乘矩阵

c - 用 C 打印出源和目标以太网地址

c - 段错误 11 我不知道为什么

c++ - 如何处理 OpenMP 并行代码中的返回?

python peewee 原始查询,不转义字符

python - Pandas date_range 为六个月值

Python Scrapy - 蜘蛛退出后执行代码

c++ - OpenMP中的每个线程执行相同数量的工作是否正常?

c++ - 为什么并行版本更慢?