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上运行
有时我会零时间,因为我在纳秒测量,我觉得奇怪,有什么东西可以在零纳秒内执行?
答案 0 :(得分:4)
我在单线程程序中运行测试...但是如何确保没有上下文切换发生,因为其他进程也可能在VM上运行
终止所有不需要的流程,如果您有选项,请提高配置流程的优先级。
除此之外,您可以使用prof或callgrind来分析您的计划。
有时我会花零时间,因为我测量的是纳秒,我觉得很奇怪,有什么东西可以在零纳秒内执行?
执行时间为0 ns,因为CPU时钟精度高于10 ms。
测量更多迭代后的时间,您将获得更好的结果。
执行更多查找,然后平均值:
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中花费的时间一样,将被忽略。