C++备忘录077:计算 set associative cache 对性能的影响

缓存的 N-way 可以通过getconf获取

LEVEL1_ICACHE_SIZE                 32768
LEVEL1_ICACHE_ASSOC                8
LEVEL1_ICACHE_LINESIZE             64
LEVEL1_DCACHE_SIZE                 32768
LEVEL1_DCACHE_ASSOC                8
LEVEL1_DCACHE_LINESIZE             64
LEVEL2_CACHE_SIZE                  262144
LEVEL2_CACHE_ASSOC                 8
LEVEL2_CACHE_LINESIZE              64
LEVEL3_CACHE_SIZE                  3145728
LEVEL3_CACHE_ASSOC                 12
LEVEL3_CACHE_LINESIZE              64

LEVEL1有32K缓存,cache line长度为64字节,8-way cache

那么缓存被分为 32K/64/8 = 64个set,set号是从000000111111,即26=64

内存按照cache line的大小被分为对应的chunk号,每个chunk号的最后6位对应set号。

chunk 0 对应cache set 0
chunk 1 对应 cache set 1

chunk 63 对应 cache set 63
chunk 64 对应 cache set 0
chunk 65 对应 cache set 1

chunk N 根据具体策略存储在 cache set N 的 8条cache line中的一条

也就是说每 64 (cache line) * 64 (set) = 4KB,内存chunk 开始存储在与4KB前的内存映射一样的 cache set

如果程序进行以4096的约数或倍数为步数的访问,程序性能可能特别差

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值