2013-09-16 58 views
0

我有一个数组包含两个元素的结构,我发送到全局内存中的CUDA,并从全局内存读取值。CUDA上的纹理内存结构

当我阅读了一些书和帖子,并且由于我只是从结构中读取值,我认为如果可以将我的数组存储在纹理内存中,我会很感兴趣。我使用的内核之外下面的代码:

texture<node, cudaTextureType1D, cudaReadModeElementType> textureNode; 

,并在主要以下行()

gpuErrchk(cudaMemcpy(tree_d, tree, n * sizeof(node), cudaMemcpyHostToDevice)); 
gpuErrchk(cudaBindTexture((size_t)0,textureNode, tree_d, n*sizeof(node))); 

,并在我的内核我用下面的:

 printf("Here %d\n",tex1Dfetch(textureNode, 0)); 

,但我做的有一个编译错误,通过使用第一行中的“节点”,但它编译如果我用int替换它,但我的观点将通过使用类似于访问我的结构数组中的元素:

tree[i].left; 

我已经试过许多东西,但一直没能使其工作,所以我不知道这是否可能。

感谢

回答

1

纹理只支持CUDA内建类型。不可能将用户结构绑定到纹理。

如果您的结构恰好与CUDA内置向量类型具有相同的大小和对齐方式,则可能会假装它是内置类型并绑定它,但这只是空闲的投机。