gpt4 book ai didi

python - 如何在 PyCUDA 中正确初始化 2D 表面? (pycuda._driver.LogicError)

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:52 32 4
gpt4 key购买 nike

我正在尝试在 PyCUDA 中初始化 2D 表面并用 NumPy 2D 数组中的值填充它。据我所知,这个想法是

  1. 打开drv.ArrayDescriptor,
  2. 使用这个描述符创建drv.Array
  3. 使用 drv.Memcpy2D 从 NumPy 数组复制数据,
  4. SurfaceReference 执行set_array

但在最后一步我仍然有 pycuda._driver.LogicError。我正在做的一个最小例子:

import numpy as np
import pycuda.driver as drv
import pycuda.autoinit
from pycuda.compiler import SourceModule

mod = SourceModule("surface<void, cudaSurfaceType2D> fld_srf;")

def numpy2d_to_array(np_array):
h, w = np_array.shape
descr = drv.ArrayDescriptor()
descr.width = w
descr.height = h
descr.format = drv.dtype_to_array_format(np_array.dtype)
descr.num_channels = 1
descr.flags = 0
device_array = drv.Array(descr)
copy = drv.Memcpy2D()
copy.set_src_host(np_array)
copy.set_dst_array(device_array)
copy.width_in_bytes = copy.src_pitch = np_array.strides[0]
copy.src_height = copy.height = h
copy(aligned=True)
return device_array

fld = np.random.random_integers(-30, 30, (1920, 1080)).astype(np.int32)
srf = mod.get_surfref('fld_srf')
srf_arr = numpy2d_to_array(fld.copy())
srf.set_array(srf_arr)

上面的代码抛出以下异常:

Traceback (most recent call last):
File "./testsurface.py", line 30, in <module>
srf.set_array(srf_arr)
pycuda._driver.LogicError: cuSurfRefSetArray failed: invalid value

任何想法如何正确地做到这一点?或者至少为什么会出现此错误?

最佳答案

这可能与标志有关:在 3D 情况下,您必须设置 descr.flags = drv.array3d_flags.SURFACE_LDST允许结合到表面 this .

不过我没有找到 pycuda 的 2D 等价物。

关于python - 如何在 PyCUDA 中正确初始化 2D 表面? (pycuda._driver.LogicError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245849/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com