CPU缓存:两个地址之间的距离是否需要小于8个字节才能获得缓存优势?

时间:2017-08-16 18:27:59

标签: caching cpu-architecture cpu-cache

这似乎是一个奇怪的问题..

假设缓存行的大小为64字节。此外,假设L1,L2,L3具有相同的高速缓存行大小(this帖子表明它是英特尔酷睿i7的情况。)

内存中有两个对象AB,其(物理)地址相距 N 个字节。为简单起见,我们假设A在缓存边界上,也就是说,它的地址是64的整数倍。

1)如果N< 64,当CPU获取A时,B也将被读入缓存。因此,如果需要B,并且高速缓存行尚未被逐出,则CPU会在很短的时间内获取B。每个人都很开心。

2)如果N>> 64(即远大于64),当CPU提取A时,B不会与A一起读入缓存行。所以我们说“CPU不喜欢追逐指针”,这是避免堆分配基于节点的数据结构的原因之一,如std::list

我的问题是,如果N> 64但仍然很小,比如N = 70,换句话说,AB不适合一个缓存行,但距离A不太远}是由CPU加载的,提取B的时钟周期是否与N远大于64时的时钟周期相同?

改写 - 加载A时,让 t 表示提取B的时间, t N < / em> = 70)远小于或几乎等于 t N = 9999999)?

我问这个问题,因为我怀疑 t N = 70)远小于 t N = 9999999),因为CPU缓存分层

如果有定量研究,那就更好了。

2 个答案:

答案 0 :(得分:4)

至少有三个因素可以在A错过更快后获取B。首先,处理器可以推测性地获取下一个块(独立于任何基于步幅的预取引擎,这将取决于在时间和位置上彼此接近的两个未命中以确定步幅;单元步幅预取不需要确定步幅值[它是一个]并且可以在第一次未命中后开始。由于这种预取会消耗内存带宽和片上存储,因此它通常会有一个限制机制(可以像具有适度大小的预取缓冲区一样简单,只在存储器接口足够空闲时进行高度推测的预取)。

其次,因为DRAM被组织成行并且更改行(在单个存储体内)增加了延迟,如果B与A在同一DRAM行中,则对B的访问可以避免行预充电的延迟(关闭先前打开行)并激活(打开新行)。 (这也可以提高内存带宽利用率。)

第三,如果B与A在同一地址转换页面中,则可以避免TLB。 (在许多设计中,分层页表遍历在附近区域也更快,因为可以缓存分页结构。例如,在x86-64中,如果B与A处于相同的2MiB区域,则TLB未命中可能只需要执行一次内存访问因为页面目录仍然可以被高速缓存;此外,如果B的转换与A的转换在64字节的高速缓存行中相同,并且A的TLB未命中有点近,则高速缓存行可能仍然存在。)< / p>

在某些情况下,人们还可以通过在固定的有序步幅中排列可能一起错过的对象来利用基于步幅的预取引擎。这似乎是一个相当困难和有限的上下文优化。

步幅可以增加延迟的一个显而易见的方法是引入冲突未命中。大多数高速缓存使用简单模数具有有限关联性的两个索引的幂,因此两个步幅(或对同一高速缓存集的其他映射)的功率可以在有限数量的集合中放置不成比例的数据量。一旦超过相关性,就会发生冲突未命中。 (已经提出了倾斜的关联性和非幂次模数索引来减少这个问题,但是这些技术尚未被广泛采用。)

(顺便说一下,指针追逐特别慢的原因不仅仅是低空间局部性,而且直到完成对A的访问之后才能开始对B的访问,因为存在数据依赖性,即延迟提取B不能与提取A的延迟重叠。)

答案 1 :(得分:2)

如果B的地址低于A,则即使它们相邻,它也不会在同一个缓存行中。所以你的N < 64案例被错误命名:它实际上是“相同的缓存行”案例。

由于你提到了英特尔i7:Sandybridge系列在L2中有一个“空间”预取器(如果已经没有很多未完成的未命中)预取另一对高速缓存行来完成一个自然对齐的128B一对线。

来自英特尔的优化手册,第2.3节“SANDY BRIDGE:

  

2.3.5.4 Data Prefetching

     
      
  • ......有些预取者会进入L1。

  •   
  • 空间预取器:此预取程序努力完成提取到L2缓存的每个缓存行   完成它的对线到一个128字节对齐的块。

  •   
  • ......其他几个预取程序尝试预取L2

  •   

IDK多久这样做;如果在第一个高速缓存行到达之前它没有发出请求,那么对于指针追逐情况来说它没有多大帮助。在高速缓存行到达L1D之后,依赖加载只能执行几个周期,如果它实际上只是指针追逐而没有一堆计算延迟。但是如果它在第一次未命中后立即发出预取(其中包含第二次加载的地址),则第二次加载可能会在L1D缓存中找到其数据,在第一次需求加载后已经到达一个或两个周期。

无论如何,这使得128B边界与英特尔CPU中的预取相关。

请参阅保罗对其他因素的出色答案。