6666666666
此时我们假设 在这个例子中,对于 接下来对 array[4] 的引用会导致不命中,而一个新的块被加载到高速缓存中,接下来 array[5] ~ array[7] 这三个引用都命中,以此类推。这种情况下,四个引用中,三个会命中,在缓存初始化为空的情况下,这是能遇到的最好的情况了。 总的来说,上面的例子说明了两个关于编写高速缓存友好的代码的重要问题: 1、对局部变量的反复引用是优秀的,因为编译器能够将他们缓存在寄存器中(时间局部性)。 2、步长为 1 的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块(空间局部性)。 对多维数组进行操作的程序中,空间局部性尤为重要,可以想象如果我们一列一列地扫描多维数组,且数组要比高速缓存要大,那么有可能每次对数组中元素的访问都会不命中!在这种情况下,Cache 在加快程序运行方面的作用就几乎为 0 了,编写出来程序的运行速度可能会相差几十倍! 总之,作为优秀的软件工程师,我们应当注意程序中的局部性,试着编写利用局部性的程序。 在下一篇中,我们将深入地研究 Cache 的一致性问题,通过对 Cache 一致性问题的研究,我们将会理解在使用 Cache 的过程中遇到的各种问题,并有能力来解决它。 1、安富莱 V7 用户手册: https://pan.baidu.com/s/1gfGIUoNlosJeP9OOWTVkAQ,提取密码: u2ef 2、在上述手册中的第 23、24 章详细介绍了 MPU 以及 Cache 的配置,有兴趣的小伙伴可以下载阅读。 RT-Thread线上活动 1、【西安站】物联网操作系统RT-Thread基础入门免费培训全天:2019年6月22日 9:30 ~ 2019年6月22日 17:00,培训全程将以【理论+动手】方式进行,通过拆解一个DEMO实例,带你从内核到组件到软件包全面了解RT-Thread的体系框架。 扫码报名 2、6.17 深圳 SiFive&RT-Thread趣味开发竞赛,高含金量赛题助你挖掘自身潜能,,参与即得丰厚礼品,还能现场邂逅开发大牛获得指导! 扫我参赛 #题外话# 喜欢RT-Thread不要忘了在GitHub上留下你的星 哦,你的star对我们来说非常重要!链接地址:https://github.com/RT-Thread/rt-thread |