Python 如何使用PyCuda mem_alloc_pitch()

Python 如何使用PyCuda mem_alloc_pitch(),python,cuda,nvidia,pycuda,Python,Cuda,Nvidia,Pycuda,我最近一直在尝试PyCuda 我现在想做一些非常简单的事情,分配一些内存。我假设我有一些基本的误解,因为这是一个相当简单的任务。我的理解是,通过下面的代码,我将创建一个512宽、160高、elementsize为1字节的2d Cuda阵列 下面是一些测试代码 import pycuda.driver as cuda import pycuda.autoinit # Alloc some gpu memory test_pitch = cuda.mem_alloc_pitch(512,160,1)

我最近一直在尝试PyCuda

我现在想做一些非常简单的事情,分配一些内存。我假设我有一些基本的误解,因为这是一个相当简单的任务。我的理解是,通过下面的代码,我将创建一个512宽、160高、elementsize为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
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
pycuda.\u driver.LogicError:CumeAllocPictch失败:参数无效

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

引用CUDA驱动程序API

该功能可以填充分配,以确保相应的 任何给定行中的指针都将继续满足对齐条件 地址从一行更新到另一行时合并的要求。 ElementSizeBytes指定最大读取和写入的大小 这将在内存范围内执行元素大小字节可以是4, 8或16(因为在其他系统上不可能合并内存事务 数据大小)

在这种情况下,前两个参数是PyCUDA调用中
mem\u alloc\u pitch
的返回值,
ElementSizeBytes
access\u size

你有:

cuda.mem_alloc_pitch(512,160,1)

i、 e.您的
access\u size
为1,这是非法的。只有4、8或16是合法的。这就是错误。

谢谢你的回答。这是给皮库达的还是给库达的?在PyCuda文档中,它提到了一些关于访问大小的内容,这与CUDA函数中的ElementSizeBytes参数相同吗。以下是[PyCUDA API是CUDA驱动程序API的一个非常薄的包装。如果有疑问,请阅读CUDA驱动程序API文档,因为它们是获得最佳答案的唯一工具。
cuda.mem_alloc_pitch(512,160,1)