是否可以在CUDA中并行处理二叉树数组?

时间:2016-04-14 13:58:57

标签: c++ data-structures tree cuda

我有一个树节点,其数据是一个字符串。

class node{
private:
    string data;
    node *left,*right;
}

现在我有一个树节点数组,其中我将多个文件的内容附加到二叉树的数组中。

现在我想执行瘫痪键的二进制搜索。可能吗 ??我知道只有根的地址存储在数组的元素中。是否可以将的内容复制到设备。请建议我使用比2D数组linear search更有效的搜索算法。如果我复制整个树的数组,它仍然是efficient

2 个答案:

答案 0 :(得分:1)

正如我从你的问题中所理解的,你有一系列元素代表了许多二叉树的根源。如果您想将此数组发送到您的设备,我建议您在已排序的向量中转换每个树,并对每个向量执行二进制搜索。也就是说,您将拥有一组已排序的数组 现在,您可以对所有子阵列执行并行二进制搜索。您甚至可以将每个已排序的数组拆分成组,并对每个组执行二进制搜索。

答案 1 :(得分:1)

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

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

    使用类似于reduce的技术(参见CUDA GPU计算SDK中的标量产品示例),在GPU上搜索一些小值可能会更好,而不是实际构建树。