微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 PyCuda mem_alloc_pitch()

如何解决如何使用 PyCuda mem_alloc_pitch()

我最近一直在试用 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

如果有人对我做错了什么有任何见解,将不胜感激。

解决方法

引自 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 是合法的。因此错误。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。