我有一个包含两个元素的结构的数组,将其发送到全局内存中的CUDA,然后从全局内存中读取值。
当我阅读一些书籍和帖子时,由于我只是从结构中读取值,我认为如果可以将数组存储在Texture内存中,我会很有趣。我在内核外部使用了以下代码:
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 ));
但是我确实出现了编译错误,在第一行中使用了“节点”,但是如果我将它替换为int的话,它会编译,但是我要指出的是,我的结构数组中的访问元素将使用类似以下内容的东西:
tree[i].left;
我已经尝试了多种方法,但是无法使其正常工作,所以我想知道这是否可行。
谢谢
纹理仅支持内置的CUDA类型。不可能将用户结构绑定到纹理。
如果您的结构恰好具有与CUDA内置向量类型相同的大小和对齐方式,则可以假装它是内置类型并将其绑定,但这只是闲置的推测。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句