首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用纹理1D的PyCuda 1D插值

使用纹理1D的PyCuda 1D插值
EN

Stack Overflow用户
提问于 2018-06-06 01:12:54
回答 1查看 292关注 0票数 0

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

这是我的CUDA内核代码:

代码语言:javascript
复制
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代码片段,其中我读取了一个测试图像,在图形处理器上分配内存,将图像复制到图形处理器上,通过set_address创建纹理引用,并调用我的内核:

代码语言:javascript
复制
...
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)
...

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 03:48:47

由于已将线性内存绑定到纹理引用,因此必须在内核中使用tex1Dfetch而不是tex1D来访问纹理。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50705562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档