C++绩效衡量中的一些问题
Some issues in C++ performance measurement
timespec start, end;
clock_gettime(CLOCK_MONOTONIC, &start);
---code--lookup in a unordered map <string, int>
clock_gettime(CLOCK_MONOTONIC, &end);
int diff = diff_ns(end, start);
Results:
SAMPLE MIN(ns) MAX(ns) AVG(ns)
100 1000 3000 1430
500 1000 2000 1436
1000 0 16000 1441
5000 0 15000 1479
10000 0 26000 1489
50000 0 363000 1589
100000 0 110000 1591
200000 0 804000 1659
300000 0 118000 1668
400000 1000 354000 1701
500000 0 8679000 1712
600000 0 809000 1701
700000 0 373000 1704
800000 0 850000 1716
900000 0 856000 1736
1000000 0 817000 1730
如何忽略CPU花费的时间来计算clock_gettime,因为最终我们也花费了clock_gettime调用所花费的时间?
我正在单线程程序中运行测试...但是如何确保没有发生上下文切换,因为其他进程也可能在 VM 上运行
有时我得到零时间,因为我以纳秒为单位测量,我觉得很奇怪,某件事如何在零纳秒内执行?
我正在单线程程序中运行测试...但是如何确保没有发生上下文切换,因为其他进程也可能在 VM 上运行
终止所有不需要的进程,如果有选择,请提高所分析进程的优先级。
除此之外,您可以使用 prof 或 callgrind 来分析您的程序。
有时我得到零时间,因为我以纳秒为单位测量,我觉得很奇怪,某件事如何在零纳秒内执行?
您将获得 0 ns 的执行时间,因为 CPU 时钟精度高于 10 毫秒。
在多次迭代后测量时间,您将获得更好的结果。
执行更多查找,然后平均值:
timespec start, end;
clock_gettime(CLOCK_MONOTONIC, &start);
for (int i=0;i<10000;++i)
---code--lookup in a unordered map <string, int>
clock_gettime(CLOCK_MONOTONIC, &end);
int diff = diff_ns(end, start)/10000;
就像在clock_gettime度过的这段时间将被忽视。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题