使用pycuda库中的SourceModule函数可以将原来的内联的CUDA C代码编译成可以从python启动的内核函数。例如:
kernal_function = SourceModule( """ __global__ void vector_multiple(float *vecin, float *vecout, float delta) # __global__用于声明为核函数,void为申明类型 { int i = threadIdx.x; vecout[i] = delta * vecin[i]; } """ )
在实际启动内核函数时候,需要通过pycuda的get_function函数提出内核函数的引用,例如:kernal_function_togpu = kernal_function.get_function("vector_multiple")
通过GPUArray 矩阵类可以将numpy中的数组和矩阵直接转换成cuda可处理类型,该步骤即将CPU中的数据复制到GPU中。
vecin_gpu = gpuarray.to_gpu(vecin),gpuarray.empty_like(vecin_gpu)用于从全局分配空闲空间
运行内核函数:kernal_function_togpu(vecin_gpu, vecout, np.float32(3), block=(512, 1, 1), grid=(1, 1, 1))