-1

我正在通过简单的示例学习在 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);  
}
4

1 回答 1

3

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

但是,如果将纹理绑定到由cudaMallocPitchor分配的内存cudaArray,则可以使用内核内部的tex1Dor函数访问它。tex2D

于 2012-09-23T07:16:17.463 回答