我正在通过简单的例子学习在 CUDA 中使用纹理。我尝试了以下示例,但它不起作用。它显示值 0。
#include "cuPrintf.cu"
texture<int,1,cudaReadModeElementType> ref;
__global__ void kernel(int *a)
{
int b=tex1D(ref,0);
cuPrintf("value is %d",b);
}
int main()
{
int *a;
cudaMalloc((void**)&a,32000*sizeof(int));
cudaMemset(a,1,32000*sizeof(int));
cudaChannelFormatDesc bit = cudaCreateChannelDesc<int>();
cudaBindTexture(0,ref,a,bit,32000*sizeof(int));
kernel<<<1,1>>>(a);
}
您已使用 cudaMalloc
函数分配了内存。如果将纹理绑定到分配的内存中 cudaMalloc
,则可以使用内核内部的函数tex1Dfetch()
访问它。使用 tex1D
将返回零。
但是,如果将纹理绑定到cudaMallocPitch
或cudaArray
分配的内存,则可以使用内核内的tex1D
或tex2D
函数访问它。