我创建了一个形状为(64, 128)
的numpy float32s数组,我想把它发送到GPU。我怎么做?我的内核函数应该接受什么参数? float** myArray
?
我已尝试直接将数组发送到GPU,但pycuda抱怨正在访问对象......
答案 0 :(得分:4)
默认情况下,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
。