有没有办法知道一个函数在CPU缓存中占用(或可能占用)多少空间

Is there any way to know how much space a function takes (or possibly can take) in CPU cache?

本文关键字:空间 缓存 多少 CPU 函数 有没有 一个      更新时间:2024-09-27

我刚刚开始深入了解CPU缓存,出于好奇,我想学习如何估计CPU缓存中的函数指令大小。

到目前为止,我了解到通过在So和谷歌中冲浪来监控L1缓存并不是很容易。但令人惊讶的是,我找不到任何解释我问题的帖子。

如果这是不可能的,至少知道什么时候有人应该担心填充L1/L2缓存,而不是,知道是件好事。

谢谢。

你能测量它吗?

是。查看反汇编程序的输出或测量库的大小增加。

你应该担心吗?

绝对不是。可执行代码通常很小。如果你经历过一次,即使我们谈论的是GBs,它也会很快。使事情变慢的通常方法是循环和递归,通常这样的函数往往是集中的和小的。在大多数系统上,一级缓存的几个MB应该涵盖任何有趣的代码。

与缓存相关的加速的常见来源是内存访问模式。如果你的小循环跳过了所有的内存,它将比一个或多或少线性访问或非常可预测的巨大函数慢得多。

代码中性能不佳的另一个原因往往是分支预测。错误地预测分支的结果会导致CPU停滞。受够了那个些表演就会受到影响。

这两种情况通常都是系统性能的最后一次下降。首先确保代码工作正常,然后去尝试寻找性能改进,通常从围绕代码的最热门部分(执行次数最多的部分(进行算法和数据结构优化开始。