1. 为什么需要Cache?
大容量的存储器(如DRAM)访问速度受到限制,一般比CPU时钟速度慢很多;小容量的存储器(如SRAM)能提供快速的访问速度。因此很多高性能的处理器都提供分层的存储访问架构。
如图3所示,左右分别是平坦式存储器架构和2层cache的多层存储架构。在左边的架构中,即使CPU能运行在600MHz,但由于片内/片外存储器只能运行在300MHz/100MHz,CPU在访问存储时需插入等待周期。
图3 平坦式和层级式存储器架构
2. Cache部分工作状态说明
Cache hit(缓存命中):对于已经缓存的程序/数据,访问将引起缓存命中,缓存中的指令/数据立即送入CPU而无需等待。
Cache miss(缓存缺失):发生缺失时,首先通过EMIF读入需要的指令/数据,指令/数据在送入CPU的同时被存入Cache,读入程序/数据的过程CPU被挂起。
Cache flush(缓存命中):清空Cache已经缓存的数据。
Cache freeze(缓存冻结):Cache内容不再改变,发生缺失时,从EMIF中读入的指令包不会同时存入Cache。
Cache bypass(缓存旁路):Cache内容不再改变,任何程序/数据都将从缓存外存储器访问。
3. C6000的存储架构
C6000系列DSP在片内RAM和CPU之间提供两层Cache L1和L2,每层Cache又分为独立的程序Cache和数据Cache。其中L1是固定的,L2可以被重映射为普通片内RAM。
对程序/数据进行访问时,CPU首先到L1 Cache中寻找,命中则直接访问,如果产生缺失,则继续在L2Cache中寻找,如果还未命中,则到片内RAM或片外RAM中寻址数据。
图4 C6000 CPU的程序/数据访问流程
4. 访问定位的规律
由图4可知,要保证CPU的存储访问效率,只有在CPU在大部分的访问都是只针对最靠近它的存储区时才有效。幸运的是,根据访问定位的规律,这一条可以保证。访问的定位规律表明程序在一个相对小的时间窗口对仅需要一个相对较小size的数据和代码。数据定位的两条规律:
空间关联性:当一个数据被访问时,它临近的数据又很大可能会被后续的存储访问。
时间关联性:一个存储区被访问时,在下一个临近的时间点还会被访问。
5. 优化cache性能
从访问定位规律出发,可总结出优化cache性能的一些基本准则:
让函数尽可能充分的对数据处理以提高数据的重用。
组织数据和代码以提高cache命中率。
合理的空间划分来平衡程序cache和数据cache。
组合那些对相同数据进行处理的函数在一个存储区域。