gpt4 book ai didi

c++ - C++性能测量中的一些问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:53 24 4
gpt4 key购买 nike

 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 上运行

  • 有时我得到的时间为零,因为我以纳秒为单位进行测量,我觉得很奇怪,为什么某些东西可以在零纳秒内执行?

最佳答案

I am running tests in single threaded program...but how to make sure there is no context switch happening, because other processes may also be running on VM

杀死所有不需要的进程,如果您有选择,提高配置文件进程的优先级。

除此之外,您可以使用 profcallgrind分析您的程序。

Sometimes I get zero time taken, since I am measuring in nanoseconds, I find it strange, how something can execute in zero nanoseconds?

您的执行时间为 0 纳秒,因为 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上的时间会被忽略。

关于c++ - C++性能测量中的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596150/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com