首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环二维数组的最快方法?

循环二维数组的最快方法?
EN

Stack Overflow用户
提问于 2009-06-15 17:02:42
回答 6查看 26.2K关注 0票数 34

我刚刚偶然发现了关于缓存算法的this blog post

作者展示了两个代码示例,它们循环遍历一个矩形并计算一些东西(我猜计算代码只是一个占位符)。

在其中一个示例中,他垂直扫描矩形,而在另一个示例中水平扫描矩形。然后他说第二个是最快的,每个程序员都应该知道为什么。现在我一定不是一个程序员,因为对我来说它看起来完全一样。

有人能解释一下为什么前者更快吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-15 17:04:51

高速缓存一致性。当您水平扫描时,您的数据将在内存中更接近,因此您将有更少的缓存未命中,因此性能将更快。对于一个足够小的矩形,这并不重要。

票数 59
EN

Stack Overflow用户

发布于 2009-06-15 17:34:49

答案已经被接受了,但我认为这还不是全部。

是的,缓存是所有这些元素必须以某种顺序存储在内存中的重要原因。如果您按存储顺序对它们进行索引,则可能会减少缓存未命中的次数。很有可能。

另一个问题(也被许多答案提到)是几乎每个处理器都有一个非常快的整数增量指令。它们通常不会有一个非常快的“增量乘以这第二个二进制数量”。这就是你在索引“对照颗粒”时所要求的。

第三个问题是优化。已经投入了大量的精力和研究来优化这类循环,如果您以某种合理的顺序对其进行索引,那么您的编译器将更有可能实施其中的一项优化。

票数 8
EN

Stack Overflow用户

发布于 2009-06-15 17:27:44

缓存确实是原因,但如果你想知道争论的实质,你可以看看U.Drepper的“每个程序员都应该知道关于内存的东西”:

http://people.redhat.com/drepper/cpumemory.pdf

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/997212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档