【发布时间】:2012-11-08 19:06:04
【问题描述】:
我创建了一个形状为(64, 128) 的float32 的numpy 数组,我想将它发送到GPU。我怎么做?我的内核函数应该接受哪些参数? float** myArray?
我尝试直接将数组原样发送到 GPU,但 pycuda 抱怨正在访问对象...
【问题讨论】:
标签: pycuda
我创建了一个形状为(64, 128) 的float32 的numpy 数组,我想将它发送到GPU。我怎么做?我的内核函数应该接受哪些参数? float** myArray?
我尝试直接将数组原样发送到 GPU,但 pycuda 抱怨正在访问对象...
【问题讨论】:
标签: pycuda
numpy/PyCUDA 中的二维数组默认按行主要顺序存储在倾斜线性内存中。所以你只需要一个类似这样的内核:
__global__
void kernel(float* a, int lda, ...)
{
int r0 = threadIdx.y + blockDim.y * blockIdx.y;
int r1 = threadIdx.x + blockDim.x * blockIdx.x;
float val = a[r0 + r1*lda];
....
}
访问从 Python 引用内核传递的 numpy ndarray 或 PyCUDA gpuarray。
【讨论】: