3

我创建了一个带有 shape 的 float32s numpy 数组(64, 128),我想将它发送到 GPU。我怎么做?我的内核函数应该接受哪些参数?float** myArray?

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

4

1 回答 1

5

默认情况下,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 访问通过引用传递给内核的 numpyndarray或 PyCUDA 。gpuarray

于 2012-11-08T11:06:04.360 回答