如何在CuPy中分配音调2D内存
How to allocate pitched 2D memory in CuPy?
在CuPy中,可以在主机上分配多维ndarray
,然后使用CUDA将其复制到GPU。我的问题是:
- 对于设备上的矩阵(2D阵列(,CuPy分配的内存是否具有良好的合并内存访问特性,如果是,这与
cupy.ndarray.strides
有何关系。如果没有,为什么不呢 - 为什么CuPy不使用
cudaMalloc2D
、cudaMalloc3D
、cudaMallocPitch
我的目标是将具有width
和height
的2D阵列复制到全局内存(而不是纹理内存,支持纹理内存(。在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中找不到一种方法来保证我在自定义内核中所需要的倾斜属性。我试图"使用源代码,Luke"来了解真正发生了什么,但找不到对CUDA代码的调用能达到这样的结果。
Pitched分配对于某些域来说太具体了,CuPy支持一系列用例,其中矩阵正在重塑,视图是以不同的步长创建的。此外,对于某些应用程序,数据需要连续,并且通过使用倾斜分配,Cuda会自动在维度之间引入填充。
您可以通过分配具有(高度、间距(的矩阵和具有形状(高度、宽度(的视图来模拟这种行为。应调整间距值,使其与所需数据类型的对齐匹配。
相关文章:
- 分配具有 2D 向量大小的变量的内存
- 我在 2D 数组的动态内存分配中遇到了一些奇怪的代码C++? 请解释一下这是什么?
- 在C++中使用 2D 矢量时出现明显的内存泄漏
- 在统一内存 CUDA C/C++ 中分配 2D 向量
- 如何在CuPy中分配音调2D内存
- 在 C++ 中,用于将大型 2D 数组转换为 1D 数组的内存分配
- 解除分配此特定 2D 阵列的内存
- 如何在 2d 矢量上进行内存设置
- 指向结构的指针的 2D 数组.内存访问问题
- 2D 区域的内存布局
- 将内存分配给 2D 数组时,“new int*[rowCount];”的含义是什么?是 2D 数组,是指向数组的指针数组
- 使用 DX11 加载 2D 纹理时内存泄漏
- 2D 数组内存分配 (malloc) 返回 NULL
- 带有指针的 2D 数组中的内存泄漏
- 如何将内存映像分配给DLIB阵列2d或映像
- 打印2D阵列时内存泄漏
- Buffer.BlockCopy Array 2d c++ to C# 共享内存
- 奇怪的C++2D阵列的内存泄漏
- 通过动态内存分配了解2D数组
- 直接 2d 内存消耗