矢量化(SIMD)树操作

时间:2011-08-26 23:44:49

标签: c++ sse simd vectorization

有关矢量化树操作的一般提示/指示是什么?内存布局明智,算法明智等

某些特定领域的内容:

  • 每个父节点将有相当多(20 - 200)个子节点。
  • 每个节点拥有子节点的可能性很小。
  • 树上的操作主要是条件行走。
  • 在树上行走的表现比插入/删除/搜索速度更重要。

3 个答案:

答案 0 :(得分:7)

请注意,这很难实现。去年,英特尔,甲骨文和加州大学圣地亚哥分校的团队提出了一个惊人的解决方案"FAST: Fast Architecture Sensitive Tree Search on Modern CPUs and GPUs"。他们赢了"Best Paper Award 2010" by ACM SIGMOD

答案 1 :(得分:2)

由于树木的随机特性,矢量化步行对你来说是一个很大的优势并不是很明显。

我会将树放置为(parentid,节点数据)“节点”项目的平面数组,按parentid排序,因此您至少可以一起访问节点的子节点。当然,如果你的树不是“胖子”(即一个节点的平均孩子数量很少),这并没有给你太多。

你最好的选择当然只是强调SIMD的蛮力,因为你真的无法使用这个API在你的列表中进行花哨的随机跳转。

编辑:我不会抛弃你最常见的普通树类,实施SIMD方式,看看你是否真的获得了任何东西,我不相信你会...

答案 2 :(得分:0)

使用谱图理论算法怎么样?它们应该很容易矢量化,因为它们处理矩阵。