【问题标题】:How do I feed a 2-dimensional array into a kernel with pycuda?如何使用 pycuda 将二维数组输入内核?
【发布时间】:2012-11-08 19:06:04
【问题描述】:

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

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

【问题讨论】:

    标签: pycuda


    【解决方案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];
    
        ....
    }
    

    访问从 Python 引用内核传递的 numpy ndarray 或 PyCUDA gpuarray

    【讨论】:

      猜你喜欢
      • 2013-11-19
      • 2018-06-17
      • 2019-12-19
      • 2017-10-18
      • 2016-05-08
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      相关资源
      最近更新 更多