有没有办法知道一个函数在CPU缓存中占用(或可能占用)多少空间
Is there any way to know how much space a function takes (or possibly can take) in CPU cache?
我刚刚开始深入了解CPU缓存,出于好奇,我想学习如何估计CPU缓存中的函数指令大小。
到目前为止,我了解到通过在So和谷歌中冲浪来监控L1缓存并不是很容易。但令人惊讶的是,我找不到任何解释我问题的帖子。
如果这是不可能的,至少知道什么时候有人应该担心填充L1/L2缓存,而不是,知道是件好事。
谢谢。
你能测量它吗?
是。查看反汇编程序的输出或测量库的大小增加。
你应该担心吗?
绝对不是。可执行代码通常很小。如果你经历过一次,即使我们谈论的是GBs,它也会很快。使事情变慢的通常方法是循环和递归,通常这样的函数往往是集中的和小的。在大多数系统上,一级缓存的几个MB应该涵盖任何有趣的代码。
与缓存相关的加速的常见来源是内存访问模式。如果你的小循环跳过了所有的内存,它将比一个或多或少线性访问或非常可预测的巨大函数慢得多。
代码中性能不佳的另一个原因往往是分支预测。错误地预测分支的结果会导致CPU停滞。受够了那个些表演就会受到影响。
这两种情况通常都是系统性能的最后一次下降。首先确保代码工作正常,然后去尝试寻找性能改进,通常从围绕代码的最热门部分(执行次数最多的部分(进行算法和数据结构优化开始。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- cmake更新缓存的变量
- 试图对缓存进行跨步测试,但程序并没有结束
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 通过ccmake在cmake中缓存依赖选项
- 类是C++中的命名空间吗
- 使用结构/类增加缓存空间局部性
- 使用linux用户空间内存进行缓存