缓存命中/未命中数与页面错误数-C++代码-UBUNTU
number of cache hits/miss vs page faults - C++ code - UBUNTU
我想知道我的C++代码的缓存效率有多高。我正在UBUNTU上运行它。如何查找缓存命中数或缓存未命中数?
另一个问题是:我发现使用时间命令:我的代码的一部分给出了2133(小)页面错误,另一部分给出2361(小)页错误。(小)页面错误是否与缓存未命中有关?如果是,它是如何关联的。我必须执行一些I/O操作,这会导致(轻微)页面错误吗?
linux最全面的评测工具是oprofile,它可以评测单个应用程序或整个系统,并可以为您提供有关处理器上缓存未命中(以及它们发生的位置)的详细信息,这些处理器支持缓存未命中等事件的性能计数器(过去20年生产的几乎所有x86处理器都支持此类计数器)
页面错误与缓存未命中无关,尽管它们也是性能问题的潜在来源。
写我自己的答案,因为对Chris Dodd的答案的评论越来越长。。。
您可以使用oprofile或perftool(它基本上使用与oprofile相同的内核功能)来提供缓存命中率和未命中率。请注意,很难说一个应用程序"应该有多少缓存未命中"或"缓存命中",而且你只能将这个数字与同一应用程序的另一次运行进行比较(经过调整,但也可以看到它在不同运行之间的差异有多大,这非常有用)。
我不认为页面错误的确切数量有那么关键——它往往会随着"运气"的不同而有所不同。
页面错误是由各种原因造成的。例如,分配一大块内存时,当页面第一次使用时,该内存将"不存在",此时,它将被标记为存在(并且可能在此时也被填充为零)。从共享库加载函数也会出现页面错误,因为在初始化共享库时这些函数"不存在"。在某些情况下,也可能是应用程序的一部分使用mmap
在文件中进行映射,而不是使用文件读/写操作(这可能是您对文件I/O的想法)。
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'