穿上八叉树
Threading an octree
本文关键字:八叉树 更新时间:2023-10-16
线程
化八叉树的有效方法,使得八进制中每个八位字节中包含的指针可以轻松地在同一级别遍历树。
我们必须在这里使用全线程树,以便我可以使用 openmp 在同一级别并行化代码。
我对八点树有一些经验,自己也编写了几个。基本问题是树(至少)有两个遍历方向:水平(子细胞之间)和垂直(母细胞和子细胞之间),它们不能映射到线性记忆。因此,遍历树(例如,用于邻居搜索)将不可避免地导致缓存未命中。
对于最有效的实现,您应该将非最终单元的所有(最多 8 个)子单元放在一个连续的内存块中,从而避免遍历它们时出现缓存未命中,也避免需要将它们与指针链接起来。然后,每个单元只需要一个指针/索引用于其第一个子单元,并且可能(取决于应用程序的需要)一个指向其父单元的指针。
同样,按树排序的任何粒子/位置都应按顺序排序,以便单元格中包含的所有粒子/位置在所有树级别上在内存中都是连续的。然后,每个细胞只需要存储第一个粒子和粒子数量,允许在树的每个级别(不仅仅是最终细胞)访问所有粒子。
在实践中,这种排序可以通过首先构建一个完全链接的树,然后将其映射到上述形式来实现。此映射的开销很小,但应用程序中的收益很大。
最后,当仅略微改变粒子位置的重新构建树时,可以显着加快(取决于您的算法)将前一个树顺序中的粒子馈送到树构建算法。
相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 指向二叉树中新节点的指针
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- 在我的四叉树实现中遇到问题
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 二叉树级别顺序遍历在leetcode中
- 运行无限循环的最小二叉树问题
- 打印二叉树中的常见元素
- 二叉树基准测试结果
- 如何在C++中构造八叉树
- 复制构造函数和析构函数八叉树c++
- 使用八叉树在GPU中组织三维体积数据
- 如何将四叉树/八叉树用于块世界
- 穿上八叉树
- 当我尝试构建八叉树结构时堆栈溢出
- 三角形网格和粒子的八叉树实现
- 正在调用八叉树数组上的delete