我有一个包含两个元素结构的数组,我将其发送到全局内存中的CUDA,并从全局内存中读取值。
当我阅读一些书籍和帖子时,由于我只是从结构中读取值,我认为如果可以将我的数组存储在纹理内存中,我会很有趣。我在内核之外使用了以下代码:
texture<node, cudaTextureType1D, cudaReadModeElementType> textureNode;
以及main()
中的以下行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 ));
但我确实有一个编译错误,在第一行使用“node”但是如果我用int替换它会编译但是我的观点是使用类似的东西来访问我的结构数组中的元素:
tree[i].left;
我尝试了很多东西,但是还没能使它工作,所以我想知道这是否可行。
由于
答案 0 :(得分:1)
纹理仅支持CUDA内置类型。无法将用户结构绑定到纹理。
如果你的结构碰巧与CUDA内置的矢量类型具有相同的大小和对齐,那么可能假装它是一个内置类型并绑定它,但这只是空闲的推测