C++ 在CUDA中可以并行处理二叉树数组吗?

C++ 在CUDA中可以并行处理二叉树数组吗?,c++,data-structures,tree,cuda,C++,Data Structures,Tree,Cuda,我有一个树节点,它的数据是字符串 class node{ private: string data; node *left,*right; } 现在我有了一个树节点数组,我将多个文件的内容附加到了一个二叉树数组中 现在我想对一个键执行二进制搜索,使其瘫痪。有可能吗??正如我所知,只有根的地址存储在数组的元素中。是否可以将目录树的内容复制到设备。??请给我推荐一种比2D数组线性搜索更有效的搜索算法。如果我复制整个树数组,它是否仍然有效?正如我从您的问题中了解到的,您有一个表示许多

我有一个树节点,它的数据是字符串

class node{
private:
    string data;
    node *left,*right;
}
现在我有了一个树节点数组,我将多个文件的内容附加到了一个二叉树数组中


现在我想对一个键执行二进制搜索,使其瘫痪。有可能吗??正如我所知,只有根的地址存储在数组的元素中。是否可以将目录树的内容复制到设备。??请给我推荐一种比2D数组
线性搜索更有效的搜索算法。如果我复制整个树数组,它是否仍然有效?正如我从您的问题中了解到的,您有一个表示许多二叉树的根的元素数组。如果你想把这个数组发送到你的设备上,我建议把每个树转换成一个排序向量,然后对每个向量执行二进制搜索。也就是说,您将拥有一个排序数组。

现在可以对所有子数组执行并行二进制搜索。您甚至可以将每个已排序的数组拆分为多个组,并对每个组执行二进制搜索。

根据使用情况,内存传输可能是瓶颈,比搜索要昂贵得多。因此,在分配内存时要非常小心。使用在数组中排列节点和指针的节点分配器是个好主意。但是,您可以输入以下问题:

  • 指针可能在两个地址空间中都无效,因此您希望在GPU上使用数组中的索引或统一内存来执行此操作
  • 据我所知,
    std::string
    在CUDA中不受支持,因此您可能更喜欢使用
    char*
    来指向字符串数据(它也应该在GPU内存空间中可用,因此有一个专用的字符串存储系统)
  • 这样就可以并行化搜索,但好处很大程度上取决于要搜索的树的数量。如果与GPU上运行的CUDA线程数量(即数千个)相比,它的好处是不确定的


    在GPU上使用类似于reduce的技术(参见CUDA GPU计算SDK中的scalar prod示例)在一个小集合中搜索某些值可能比实际构建树更好。

    树是排序的还是随机的?树是排序的。树的数组是什么意思?由许多树的根组成的数组?是的。。包含树的根的数组。