我最近一直在尝试PyCuda。
我现在想做一些很简单的事情,分配一些内存。我想我有一些基本的误解,因为这是一个相当简单的任务。我的理解是,使用下面的代码,我将创建一个宽512、160高、元素大小为1字节的2d Cuda数组。
下面是一些测试代码。
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如果有人对我做错了什么有深刻的见解,那将是非常感激的。
发布于 2021-06-11 09:59:21
引用CUDA驱动程序API 文档
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是合法的。因此,错误。
https://stackoverflow.com/questions/67933438
复制相似问题