首页 > 后端开发 > C++ > 为什么循环 8192 个元素比 8191 或 8193 慢得多?

为什么循环 8192 个元素比 8191 或 8193 慢得多?

Susan Sarandon
发布: 2024-12-11 08:56:10
原创
847 人浏览过

Why is Looping Over 8192 Elements So Much Slower Than 8191 or 8193?

循环 8192 个元素时的性能影响

当矩阵大小(特别是行数)为2048 的倍数(例如 8192)。这种现象被称为超级对齐,是由于现代 CPU 中的特定内存管理实践而产生的。

提供的代码片段演示了这个问题,其中矩阵 res[][] 是根据矩阵 img[ 计算得出的][]。不同矩阵大小(特别是 8191、8192 和 8193)的性能显示,当矩阵大小为 8192 时,性能显着下降。

超级对齐效果

性能差异源于对矩阵的逐列迭代的嵌套循环导致的对内存的不均匀访问图像[][]。这种非顺序访问模式会导致现代 CPU 的性能下降,而现代 CPU 通过顺序内存访问可以更有效地运行。

解决方案:互换外循环

解决方案在于重新排序嵌套循环,优先考虑行迭代而不是列迭代。通过这样做,内存访问变得顺序,显着提高性能:

性能结果

以下性能结果展示了通过交换外循环实现的改进:

Matrix Size Original Code (s) Interchanged Loops (s)
8191 1.499 0.376
8192 2.122 0.357
8193 1.582 0.351

此优化极大地减少了维度为以下倍数的矩阵的性能差距2048,从而在不同的矩阵大小上获得一致的性能。

以上是为什么循环 8192 个元素比 8191 或 8193 慢得多?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板