如何使用pycuda将二维数组馈入内核?

时间:2012-11-08 04:48:08

标签: pycuda

我创建了一个形状为(64, 128)的numpy float32s数组,我想把它发送到GPU。我怎么做?我的内核函数应该接受什么参数? float** myArray

我已尝试直接将数组发送到GPU,但pycuda抱怨正在访问对象......

1 个答案:

答案 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