August
12th,
2022
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 函数的方法
您的打赏是对我最大的鼓励!