如何养活一个2维数组与pycuda内核?(How do I feed a 2-dimensional

2019-08-02 11:01发布

我已经创建float32s的numpy的阵列形状(64, 128)我想将其发送到GPU。 我怎么做? 应我的内核函数接受什么样的参数? float** myArray

我曾尝试直接发送阵列,因为它是对GPU,但pycuda抱怨说,被访问的对象...

Answer 1:

在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];

    ....
}

访问numpy的ndarray或PyCUDA gpuarray通过参考从Python的内核通过。



文章来源: How do I feed a 2-dimensional array into a kernel with pycuda?
标签: pycuda