文章目录
一、前言
原打算重新学习一下 volatile
的实现原理,其中涉及到指令调度重排和数据可见性保证,这两者的理解离不开对 CPU Cache的掌握,因此,先重温一下CPU Cache,便有了本文。
二、为何需要CPU Cache
CPU的发展呈现出摩尔定律(近期越来越多的声音觉得结束了),发展速度迅猛,每18-24个月性能翻番。而内存的发展相较之下显得十分缓慢,与CPU的性能差距越来越大。为了缓冲两者的速度差,引入了采用SRAM做Cache的三级缓存(L1、L2、L3),以提高CPU的计算效率。当然了,其实内存并非无法提速,只是出于成本和容量的平衡。
1965 年,英特尔联合创始人戈登·摩尔提出以自己名字命名的「摩尔定律」,意指集成电路上可容纳的元器件的数量每隔 18 至 24 个月就会增加一倍,性能也将提升一倍。
这就好像咱们去超市购物,所购买的东西经常就那么几样,真正购物的时间很短,但是交通耗时、买单排队耗时通常就已经占据了大部分的时间。出于成本考虑,一个小区配备一个超市显然不太可能。于是引入了住宅楼下的自动售卖机、社区的便利店等。如此一来,购物效率自然提高了。
三、L1、L2 、L3 Cache 三级缓存结构
三级缓存集成在CPU中,组成如下,每个CPU核都拥有自己的L1 Cache、L2 Cache,而L3 Cache为所有核心共享。其中,L1距离Execution Units计算单元距离最近,计算速度通常十分接近;L2 、L3分别次之。另外,L1 Cache 一般分为 L1d 数据缓存 和 L1i 指令集缓存,用以减少CPU多核心/多线程竞抢缓存引起的冲突。
读取数据时,逐级访问,即执行单元访问L1,若不存在该数据,则L1访问L2,L2若同样没有则访问L3,最后L3访问内存。
三级缓存的大小通常不大,以本机i5-8259u
为例:
i5-8259u:
L1 Data Cache :32.0 KB x 4
L1 Instructio