gpt4 book ai didi

python - 使用 1D 纹理的 PyCuda 1D 插值

转载 作者:行者123 更新时间:2023-12-01 09:22:38 27 4
gpt4 key购买 nike

我是 CUDA 新手,我的目标是使用 PyCUDA 和 CUDA 1D 纹理实现简单的 1D 插值。出于测试目的,我只想要一个内核,它以数组的形式返回原始图像值(从纹理中提取)。问题是 tex1D(tex, pos);始终返回 0。

这是我的 CUDA 内核代码:

interp1 = """

#include <stdint.h>

texture<uint8_t, 1> tex;


__global__
void interp1(uint8_t *out) {

unsigned int pos = blockIdx.x * blockDim.x + threadIdx.x;
out[pos] = tex1D(tex, pos);
}

"""

这是我的Python代码片段,我在其中读取测试图像,在GPU上分配内存,将图像复制到GPU上,通过set_address创建我的纹理引用并调用我的内核:

...
img = cv2.imread("lena.jpg", 0)
img_in = pycuda.driver.to_device(img.flatten())
texref.set_address(img_in, img.nbytes)
texref.set_format(pycuda.driver.array_format.UNSIGNED_INT8, 1)

img_out = pycuda.driver.mem_alloc(img.nbytes)

interp1_func(img_out, block=(512, 1, 1), grid=(7200, 1, 1)) # image is 1920 x 1920

context.synchronize()
imgnew = np.zeros_like(img.flatten())
pycuda.driver.memcpy_dtoh(imgnew, img_out)
imgnew = imgnew.reshape(img.shape)
...

希望有人能帮我解决这个问题。

最佳答案

因为您已将线性内存绑定(bind)到纹理引用,所以必须使用 tex1Dfetch ,而不是tex1D在内核中访问纹理。

请注意,在这种情况下,也无法执行插值,只能执行查找。

关于python - 使用 1D 纹理的 PyCuda 1D 插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50705562/

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