在 CuPy 中,可以在主机上分配多维ndarray
,然后使用 CUDA 将其复制到 GPU。我的问题是:
- CuPy 分配的内存是否对设备上的矩阵(2D 数组)具有很好的合并内存访问属性,如果是,它与
cupy.ndarray.strides
. 如果不是,为什么不呢? - 为什么 CuPy 不使用
cudaMalloc2D
,cudaMalloc3D
,cudaMallocPitch
?
我的目标是将二维数组复制width
到全局内存(不是height
纹理内存 -支持)。在 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 中找不到一种方法,它似乎可以保证我在自定义内核中需要的倾斜属性。我试图“使用源,卢克”来找出真正发生的事情,但找不到对 CUDA 代码的调用来实现这样的结果。