tex1Dfetch和2D纹理

时间:2016-11-30 08:24:12

标签: c++ cuda

如果我使用

声明无绑定纹理对象
cudaResourceDesc resDesc;
memset(&resDesc, 0, sizeof(resDesc));
resDesc.resType = cudaResourceTypeLinear;
resDesc.res.linear.devPtr = device_global_memory_ptr;
resDesc.res.linear.desc.f = cudaChannelFormatKindUnsigned;
resDesc.res.linear.desc.x = 8 /* 8 bit */ ;
resDesc.res.linear.desc.y = resDesc.res.linear.desc.x;
resDesc.res.linear.desc.z = resDesc.res.linear.desc.x;
resDesc.res.linear.desc.w = resDesc.res.linear.desc.x;
resDesc.res.linear.sizeInBytes = buffer_bytes_size;

cudaTextureDesc texDesc;
memset(&texDesc, 0, sizeof(texDesc));
texDesc.readMode = cudaReadModeElementType;
texDesc.filterMode = cudaFilterModePoint;
texDesc.addressMode[0] = cudaAddressModeBorder;
texDesc.addressMode[1] = cudaAddressModeBorder;
texDesc.addressMode[2] = cudaAddressModeBorder;

cudaTextureObject_t tex1;
cudaCreateTextureObject(&tex1, &resDesc, &texDesc, NULL);

我后来在CUDA内核中使用它作为

uchar4 pixel = tex1Dfetch<uchar4>(tex1, index);

我还能获得2D纹理缓存的好处吗?或者缓存是否取决于tex1Dfetch指令?不幸的是,我无法让上面的代码与tex2D一起使用。

1 个答案:

答案 0 :(得分:1)

不,我不会从2D纹理缓存中获益。

如果您只使用tex2D,它将无效:我通过使用cudaMallocArray正确分配数据然后使用tex2D来使其正常工作。