0

我有一个包含两个元素结构的数组,我将其发送到全局内存中的 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; 

我尝试了多种方法,但无法使其正常工作,所以我想知道这是否可能。

谢谢

4

1 回答 1

1

纹理仅支持 CUDA 内置类型。无法将用户结构绑定到纹理。

如果您有一个结构恰好与 CUDA 内置向量类型具有相同的大小和对齐方式,则可能会假装它是内置类型并绑定它,但这只是一种无聊的推测。

于 2013-09-16T15:56:04.567 回答