初次尝试使用纹理,想绑定一维线性存储器,用cudaMalloc分配的
纹理部分代码如下:
texture<float, 1, cudaReadModeElementType>texRef;
cudaMalloc( (void **)&dB, sizeof(float) * wB );
cudaMemcpy( dB, B, sizeof(float) * wB, cudaMemcpyHostToDevice );
size_t offset = 0;
cudaBindTexture( &offset, texRef, dB );
这样使用得出来的结果都是正确的,但是我在CUDA自带的资料中查到的cudaBindTexture原型是
cudaBindTexture (
size_t * offset,
const struct textureReference * texref,
const void * devPtr,
const struct cudaChannelFormatDesc * desc,
size_t size
)
上面绑定的部分这样使用会出现参数不一致的错误
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc();
cudaBindTexture( &offset, texRef, dB, &channelDesc, wB);
或者是这样用就避免了参数不一致的错误,但纹理拾取的结果却是错误的
cudaBindTexture( &offset, texRef, dB, wB );
只有像cudaBindTexture( &offset, texRef, dB );这样使用才能正确
请问纹理绑定一维线性内存究竟是怎么使用呢?麻烦又经验的朋友按上面的例子以及错误讲解一下啊,谢了