Cython是可以方便地用类Python语法代码编译生成C代码,免除多平台下复杂的C++工程配置.

Python中往往使用numpy来处理大量数值,对其计算时避免不了使用循环.循环数值计算再合并GIL造成的严重的CPU性能损耗.

那么把 numpy 数据对象转为 C 数组然后执行无GIL的本地编译计算.

Step 1 . np.array convert to C array

def const c_type[:] view = ndarray

这个视图操作会产生 memroy copy.

ndarray.data ndarray.ctypes.data

Step 2 . C ptr -> C array

很简单 &view[0] 即可得到地址

Step 3 . numerical calculation

val = ptr[0] + ptr[1]

Step 4 . 测试

必须要有完备的单元测试对数值结果进行对比测试

不得不提的一些问题

1. 数据类型问题

目前还没有找到 numpy data buffer 直接调用对应 C++ template 函数的方法


支付宝打赏 微信打赏

您的打赏是对我最大的鼓励!

linzhanyu


Linux, VIM, OpenGL, OpenCL.

Python, C++, C#, ML.

相看莫相笑,同是竹林人。