i7-10700K的存储器山

在看《深入理解计算机系统》时,上面有一个存储器山,自己也制作了一个自用电脑cpu的存储器山。放图如下:

i7-10700k存储器山.png

i7-10700k存储器山-stride.png

时间局部性视图(步长S为1时)

时间局部性视图.png
  1. 可以看出每个山脊变化点是32K,256K,8m;
  2. 而i7-10700K的缓存大小是L1:512KB,L2:2.0MB,L3:16.0MB
  3. 可以看出硬件的L1 cache难道它的L1 d-cache(即数据的cache)是32KB?

空间局部性视图

在数据大小为4M时,可以完整放入L3的缓存,而无法完整放入L2的缓存。随着步长增加,缓存不命中比率增大,但是其有一个限度,为:min(1,(wordsize*S)/B),B=64,wordsize=8,那么在步长S为8时达到最大值,小于8时则为小于1的数,从图中可以观察到步长大于8后读吞吐量几乎为常数。


数据大小为4M时的读吞吐量

那么,我觉着,读吞吐量的上,下限度是由其数据大小决定的,再看另一数据集大小为128KB的情况:


数据大小为128KB时的读吞吐量

其下限约为30000MB/S,比上面高约3倍。这时整个数据包能完整塞入L2缓存,由于不需要向下一级请求,所以最低速度会变大。

当数据能完整塞进L1时,情况入下图:


数据大小为32KB时的读吞吐量

可以看到此时的吞吐量随着步长相差很小,此时下限变得很高了。由于数据都在L1中,几乎不会有读不命中。

结论

  1. 读吞吐量是随着数据集大小和步长变化的;
  2. 数据集大小控制着时间局部性,步长控制着空间局部性;
  3. 步长为定值情况下,步长的大小控制着不同数据集大小读吞吐量的上下限;
  4. 数据集大小一定时,数据集的大小控制着不同步长的读吞吐量的上下限(和缓存大小有关);
  5. 有时我们不能控制数据集的大小,需要重点关注控制步长,让步长尽量减小,让我们尽量在这个山的高点。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容