ARM技术论坛
直播中

熊本熊

8年用户 1375经验值
擅长:处理器/DSP
私信 关注
[经验]

cache的性能和数组的组织形式有何关系呢

cache的性能

hit rate(命中率)定义为在指定的时间内cache命中数除以总的内存请求数,通常是以百分比的形式表示。

同样,miss rate是未命中数除以总的请求数。

1-hit rate= miss rate

针对特定的读或者写,可以计算出相应的读hit rate/读miss rate,以及写hit rate/写miss rate。

非常确定的是,高hit率意味着高性能。

没有办法对所有用户软件场景计算出hit率和miss率,只能针对典型场景(benchmark)计算出hit率和miss率。

hit率很大程度取决于软件业务场景操作的代码/数据占据的大小和地址空间,以及cache的规格。

cache的性能和数组的组织形式有很大的关系,如果内存访问是顺序数组的,后续的很多内存访问都在同一个cacheline,cache的存在就能够大幅提高程序的性能;否则(例如数据的组织形式是无序的链表),cache的存在并不会对程序的性能有多大的增益。

write buffer

write buffer
write buffer是处理器内核中的一个硬件模块,当内核执行store指令时,需要将相关细节(例如要写入的位置、要写入的数据以及事务大小)放入buffer。

处理器内核不必等待对主存的写入完成,就可以继续执行下一条指令。write buffer本身会将从处理器内核接收到的写数据写到主存中。

实际上,只要write buffer中有空间,write buffer就能够隐藏处理器内核写数据的延迟。

如果写入次数较少或时间间隔较长,则write buffer就不会变满。如果内核写入数据的速度快于write buffer数据写到内存的速度,那么write buffer可能已经被填满,这种场景是没有性能优势的,并且会浪费多余的功耗。

一些write buffer支持写合并,即可以将多次相邻地址的写请求合并成一个突发(burst)。这可以减少对外部存储器的相关操作,从而提高性能。

write buffer的行为不是我们在访问外围设备时想要的,因为我们可能希望内核等待写入完成,再执行下一条指令。又或者我们希望写入连续的字节流,而不希望对多个写入操作进行合并。

总之,write buffer自以为的优化行为,很多时候是不期望的,需要使用memory type进行避免。

fetch buffer

还有一个类似write buffer的硬件,fetch buffers。针对系统中的读数据请求,例如处理器内核中的一些prefetch buffers,在流水线实际需要这些数据之前就完成了相关数据的读取操作。

通常,这两类buffer对程序员都是透明的。但是在某些特殊场景下,我们可能需要仔细分析这些场景,并进行良好的软硬件配合,避免发生严重的功能问题。

原作者:验证哥布林 芯片验证工程师

更多回帖

发帖
×
20
完善资料,
赚取积分