CUDA 纹理内存程序不起作用



我正在通过简单的例子学习在 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 将返回零。

但是,如果将纹理绑定到cudaMallocPitchcudaArray分配的内存,则可以使用内核内的tex1Dtex2D函数访问它。

相关内容

最新更新