如何在 CuPy 中分配倾斜的 2D 内存?

How to allocate pitched 2D memory in CuPy?

在 CuPy 中,可以在主机上分配多维 ndarray,然后使用 CUDA 将其复制到 GPU。我的问题是:

我的目标是将带有 widthheight 的二维数组复制到全局内存(不是纹理内存 - 支持的)。在 C++ 中,我可以用类似的东西来做到这一点:

    float* devPtr = nullptr;
    size_t devPitch;
    cudaMallocPitch((void **) &devPtr, &devPitch, sizeof(float) * width, height);
    cudaMemcpy2D(devPtr, devPitch, my_array.data(),
                 width * sizeof(float), width * sizeof(float), height,
                 cudaMemcpyHostToDevice);        

但我无法在 CuPy 中找到一种似乎可以保证我在自定义内核中需要的倾斜属性的方法。我试图 "use the source, Luke" 找出真正发生的事情,但找不到对 CUDA 代码的调用来实现这样的结果。

倾斜分配对于某些领域来说过于具体,CuPy 支持一系列用例,其中矩阵正在重塑,视图以不同的步幅创建。此外,对于某些应用程序,数据需要是连续的,并且通过使用倾斜分配,Cuda 会自动在维度之间引入填充。

您可以通过使用 (height, pitch) 分配矩阵并使用形状 (height, width) 获取视图来自己模拟此行为。应调整间距值以匹配所需数据类型的对齐方式。