2012-09-23 123 views
-1

我正在学习如何通过简单的示例在CUDA中使用纹理。我尝试了下面的例子,但它不工作。它显示值0.CUDA纹理内存程序不能正常工作

#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); 
} 
+3

此代码不完整,并且根本不包含API错误检查。发布问题时请尽量多加一点。 – talonmies

回答

3

您已通过使用cudaMalloc函数分配了内存。如果将纹理绑定到分配了cudaMalloc的内存,则可以使用内核中的函数tex1Dfetch()访问它。使用tex1D将返回零。

但如果你绑定纹理由cudaMallocPitchcudaArray分配的内存,那么它使用内核内部tex1Dtex2D功能的访问。