如何使用 PyCuda mem_alloc_pitch()
Posted
技术标签:
【中文标题】如何使用 PyCuda mem_alloc_pitch()【英文标题】:How to use PyCuda mem_alloc_pitch() 【发布时间】:2021-08-28 04:29:02 【问题描述】:我最近一直在尝试 PyCuda。
我目前想做一些非常简单的事情,分配一些内存。我假设我有一些基本的误解,因为这是一项非常简单的任务。我的理解是,通过下面的代码,我创建了一个 2d Cuda 数组,宽 512,高 160,元素大小为 1 字节。
下面是一些测试代码。
import pycuda.driver as cuda
import pycuda.autoinit
# Alloc some gpu memory
test_pitch = cuda.mem_alloc_pitch(512,160,1)
当我尝试运行此代码时,我收到以下错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
pycuda._driver.LogicError: cuMemAllocPitch failed: invalid argument
如果有人对我做错了什么有任何见解,将不胜感激。
【问题讨论】:
【参考方案1】:引用 CUDA 驱动程序 API documentation
cuMemAllocPitch ( CUdeviceptr* dptr,
size_t* pPitch,
size_t WidthInBytes,
size_t Height,
unsigned int ElementSizeBytes )
该函数可能会填充分配以确保相应的 任何给定行中的指针将继续满足对齐 随着地址逐行更新,需要合并。 ElementSizeBytes 指定最大读写的大小 这将在内存范围上执行。 ElementSizeBytes 可能为 4, 8 或 16(因为合并的内存事务在其他 数据大小)
在这种情况下,前两个参数是 mem_alloc_pitch
的返回值,ElementSizeBytes
在 PyCUDA 调用中是 access_size
。
你有:
cuda.mem_alloc_pitch(512,160,1)
即你的access_size
是 1,这是非法的。只有 4、8 或 16 个是合法的。因此错误。
【讨论】:
感谢您的回答。这是针对 PyCuda 还是 Cuda?在 PyCuda 文档中,它提到了一些关于访问大小的内容,这与 CUDA 函数中的 ElementSizeBytes 参数是否相同。继承人 [documen.tician.de/pycuda/… PyCUDA API 是 CUDA 驱动 API 的一个非常薄的包装器。如有疑问,请阅读 CUDA 驱动程序 API 文档,因为它们是相同的 感谢您的出色回答。以上是关于如何使用 PyCuda mem_alloc_pitch()的主要内容,如果未能解决你的问题,请参考以下文章