9da*_*dan 12 c c++ caching memory-management
我只知道对齐内存分配的基本思路.但我并不关心对齐问题,因为我不是汇编程序员,也没有MMX/SIMD的经验.而且我认为这是过早优化之一.
这些天人们越来越多地谈论缓存命中,缓存一致性,大小优化等.一些源代码甚至分配在CPU缓存行上显式对齐的内存.
坦率地说,我不知道我的i7 CPU的缓存行大小是多少.我知道大尺寸对齐没有坏处.但是没有SIMD会真的得到回报吗?
假设程序中有100000项100字节数据.访问这些数据是该计划最密集的工作.
如果我们改变数据结构并使所有100字节大小的数据按16字节对齐,是否可以获得显着的性能增益?10%?5%?
缓存优化甚至为单线程应用程序付费.但是缓存优化不一定在缓存开始时对齐数据,因为有几个因素需要考虑.所以要走的路是:
你符合你的表现要求吗?如果是,为什么要花时间进行优化.优化为优化薪酬很少.
衡量你的瓶颈在哪里.如果您怀疑缓存问题,请使用报告缓存未命中的工具,以便了解您可以赢得多少.
在最高级别,缓存优化的目标是用有趣的数据填充缓存,同时保留非有趣的数据.如果您正在进行多线程编程,则防止线程之间的干扰也很重要.然后,您还要防止一些特定于某些缓存实现的事情,例如共振效应,这有时会降低非完全关联缓存的影响缓存大小.
大多数关于缓存行对齐的讨论都涉及使用多线程的高性能计算,并尽可能保持可扩展性接近线性。在这些讨论中,缓存行对齐的原因是为了防止对一个数据变量的写入使还包含不同线程使用的另一个变量的缓存行无效。
因此,除非您尝试编写可扩展到非常多的处理器核心的代码,否则缓存行对齐可能对您来说并不重要。但再次测试一下看看。