当您调试性能关键代码并查看反汇编时,不难发现由于数据缓存未命中而导致的瓶颈:
加载/存储指令往往是常见的瓶颈,这意味着如果您停止程序,它很可能会在从某个不可预测的内存地址加载加载/存储指令时停止。
类似地,查找分支错误预测的一种方法是查看中断程序是否通常会在特定跳转附近停止它,然后查看代码以查看跳转是否可预测。
(或者,至少,这就是我试图找到这些瓶颈的方式。如果我正在寻找错误的症状,请告诉我......)
然而,其他类型的缓存未命中的症状是什么?
我确实知道它们很少见,但我仍然想知道如果/当它们出现时如何发现它们。
通过“其他”缓存,我的意思是:
- 指令缓存
- 翻译后备缓冲区
- 我应该知道但我不知道的其他重要缓存的奖励积分