当前位置:  开发笔记 > 编程语言 > 正文

通过良好的设计减少缓存未命中

如何解决《通过良好的设计减少缓存未命中》经验,为你挑选了2个好方法。

如何在设计C++程序时减少可能的缓存未命中数?

内联函数每次都有帮助吗?或者只有当程序是CPU限制的时候才是好的(即程序是面向计算而不是面向I/O)?



1> Boojum..:

在处理这种代码时,我喜欢以下几点.

考虑您是否需要"数组结构"或"结构数组".您要使用哪个将取决于数据的每个部分.

尝试将结构保持为32个字节的倍数,以便它们均匀地打包缓存行.

在热和冷元素中对数据进行分区.如果你有一个类o的对象数组,并且经常使用ox,oy,oz,但偶尔只需要访问oi,oj,那么请考虑将ox,oy和oz放在一起并移动i,j和k部分为平行的腋窝数据结构.

如果您拥有多维数据数据,那么使用通常的行顺序布局,沿着首选维度进行扫描时访问速度非常快,而沿着其他维度进行扫描速度非常慢.将其沿空间填充 曲线映射将有助于在任何维度中遍历时平衡访问速度.(阻塞技术类似 - 它们只是具有较大基数的Z顺序.)

如果您必须发生缓存未命中,则尝试尽可能多地使用该数据以分摊成本.

你在做什么多线程吗?注意缓存一致性协议的减速.填充标记和小计数器,以便它们位于单独的缓存行上.

英特尔的SSE提供了一些预取内在函数,如果您提前知道您将要访问的内容.



2> Chris..:

Herb Sutter有一个非常好的视频,在这里提到了这个话题

用于数据绑定操作

    在列表,地图和集合上使用数组和向量

    按行在列上进行处理

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有