给定堆分配的对象,减少对主内存的调用

时间:2011-11-12 21:58:42

标签: caching memory stack heap raytracing

OP here在最后的帖子中提到(从底部开出第4个左右):

  

“现在有一件事总是困扰着我,这就是孩子   指针检查。通常有很多空指针,和   等待内存访问用零填充缓存似乎   笨。随着时间的推移,我添加了一个包含1或0的字节来判断是否   每个指针都是NULL。起初,这只是减少了缓存   浪费。但是,我已经管理了补习9距离比较,8指针   位和3个方向位都通过一些表和逻辑来实现   生成一个允许案例跳过的单个开关变量   指针检查并仅直接调用相关的子项。它在   事实上比上面更快,但如果你没有,那就更难解释   看过这个版本。“

他将八叉树称为实时体绘制的数据结构。由于它们的大小,它们将在堆上分配。我想弄清楚的是:

(a)他在等待内存访问方面的假设是否有效?我的理解是他指的是等待完全用完主存以获取数据,因为他假设在使用动态分配的八叉树时由于通常不太好的引用位置而无法在缓存中找到它(在这种应用程序中这种数据结构很常见。)

(b)应该(a)证明是真的,我想弄清楚这个解决方法

  

随着时间的推移,我添加了一个包含1或0的字节来判断每个字节   指针是NULL。

将在没有使用堆的仍然的情况下实现,因此仍然会产生相同的开销,因为我认为它需要存储在八叉树节点中。

1 个答案:

答案 0 :(得分:0)

(a)是的,他对内存等待时间的担忧是有效的。在这种情况下,他似乎担心节点本身在内存中的大小;只有孩子们占用8个指针,64位架构上为64个字节,或者只为孩子们准备一个缓存行。

(b)该位域存储在节点本身中,但现在只占用1个字节(8个指针为1位)。我不清楚这是一个优势,因为包含孩子的行在搜索时无论如何都会被加载。然而,他显然正在做一些技巧,让他可以确定哪些孩子用很少的分支搜索,这可能会提高性能。我希望他有一些能够显示出益处的基准。