Skylake Server Microarchitecture Cache Recommendations
下表是Skylake与Broadwell微架构上缓存指标的比较。
表:Skylake与Broadwell微架构缓存比较
Cache Level | Category | Broadwell | Skylake Server |
L1 Data Cache (DCU) | Size (KB) | 32 | 32 |
Latency (cycles) | 4-6 | 4-6 | |
Max bandwidth (bytes/cycle) | 96 | 192 (doubled) | |
Sustaned bandwidth (bytes/cycle) | 93 | 133 (improved) | |
Associativity (ways) | 8 | 8 | |
L2 Mid-Level Cache (MLC) | Size (KB) | 256 | 1014 (1MB – 4 times) |
Latency (cycles) | 12 | 14 (slower) | |
Max bandwidth (bytes/cycle) | 32 | 64 (doubled) | |
Sustained bandwidth(bytes/cycle) | 25 | 52 (doubled) | |
Associativity (ways) | 8 | 16 | |
L3 Last-level Cache (LLC) | Size (MB) | Up to 2.5MB per core | Up to 1.375[1] per core |
Latency (cycles) | 50-60 | 50-70 | |
Max bandwidth (bytes/cycle) | 16 | 16 | |
Sustanined bandwidth (bytes/cycle) | 14 | 15 (slower) |
注1:如果禁用了某些处理器核,则平均每核L3容量可以超过1.375M字节。
下面的这张图演示了Skylake微架构对访存平衡性的转换:高延迟的共享分布式,切换为低延迟的本地私有式。换句话说,前几代处理器对L3的访问转换成了Skylake对L2的访问。
高速缓存的这种变化具有非常高的提升程序性能的潜力,但是软件还是要对内存的使用方式做出一些调整,这样可以针对新的缓存容量做充分的优化。
推荐1:重新平衡程序的共享数据与私有数据的大小,匹配较小的,非包含式的L3缓存和更大容量的L2缓存。
选择合适的缓存块(即放置于缓冲中的数据/代码)应该基于程序访存带宽的需求,各程序之间未必一样。相比起Broadwell微架构,具有4倍的L2缓存容量和2倍的L2访问带宽的Skylake Server微架构有可能让某些程序只需要访问L2即可运行,因此获得性能提升。
推荐2:在Skylake微架构上,如果L2可以满足程序的带宽需求,考虑将数据容纳在L2缓存中。
将LLC从包含式缓存转换为非包含式意味着L2缓存的容量可以和LLC缓存的容量叠加在一起。对于在运行时侦测缓存容量的应用程序,现在应该将L2的容量与每核平均LLC的容量相加在一起来估测每个处理器核可以使用的有效缓存容量。仅仅使用每核平均LLC的容量可能导致无法以最优化地方式使用片上高速缓存。参看下节。
推荐3:对于没有数据共享的情况,程序估测每处理器核可用缓存时应该同时考虑L2和L3(即LLC)缓存容量,不要仅仅使用L3的容量。