对于准确的C / C ++代码基准测试,推荐的方法/库是什么?能克服简单测量执行时间的不准确性的东西,即CPU频率和系统负载可能在执行时间内发生变化。不确定计数执行指令是否正确,因为我的代码中的瓶颈(可能)是内存访问。
答案 0 :(得分:3)
GNU profiler,gprof,是一种对符号线程代码进行性能测量的传统方法。您不必手动设置代码,只需在构建期间向gcc添加选项。
答案 1 :(得分:3)
如果您使用的是X86,您可以试用英特尔V-Tune放大器,它为您提供了C或C ++应用程序的深层微架构分析。它使用CPU内置性能计数器来测量执行时间,还有缓存未命中数和许多微架构级别信息。
答案 2 :(得分:0)
你所要求的几乎是不可能的。
因为在现代处理器上,由于缓存和虚拟内存效应,执行时间是高度不确定的。此外,某些操作的循环次数取决于参数的特定值。
这意味着静态基准测试(仅查看源代码)可能不准确,您无法避免运行该程序。然后运行时间将从一次执行到下一次执行。
即使平均进行多次跑步也是不准确的,因为第二次和下次执行将受到第一次执行的影响,并且不再适应现实条件。
实际上,"""运行时间不再存在。
答案 3 :(得分:-1)
在clock()上使用tick和tock,并通过将函数包装在for循环中运行至少十分之一秒。这消除了大多数缓存效果。但是,您可以做的一点是,您不一定要消除缓存,因为当用于实际时,该函数将在部分缓存的上下文中运行。很难回答那个。