我想获得一种算法的效率。该算法由我自己实现为源代码或仅来自库。 main函数将通过调用我实现的函数或共享库的接口来执行算法。 现在我希望得到准确的算法消耗的执行时间和CPU周期
Linux + GCC + C语言
由于
答案 0 :(得分:2)
考虑来自SO的代码:Get CPU cycle count?
static inline uint64_t get_cycles()
{
uint64_t t;
__asm volatile ("rdtsc" : "=A"(t));
return t;
}
并实现类似以下的类:
class ScopedTimer
{
public:
ScopedTime ()
{
m_start = get_cycles ()
}
~ScopedTimer ()
{
auto diff = get_cycles() - m_start;
std::cout << "Takes " << diff << " cycles" << std::endl;
}
private:
uint64_t m_start;
};
最后,您只需在代码中使用该类:
void job () {
ScopedTimer timer;
// do some job
// leaving the scope will automatically print the message in the desctrutor.
}
我有一些类似的代码可以自动计算不同类别的一些统计信息。 但是,主要在析构函数中,您必须将周期累积到统计类或其他内容中。
答案 1 :(得分:0)
您可以检测代码,调用返回时间戳计数器的函数,并添加逻辑来计算代码所需的时间。
这显然会改变代码,您还需要自己进行更改,以便它能够正常工作
你可以时间整个程序,但是在时间使用方式上并没有给你很多精细的数据。
最好的方法衡量这种事情是在分析器中运行程序。如果您使用的是新版Linux,则可以使用perf
。
答案 2 :(得分:0)
请注意,rtdsc
取决于架构。但是,get_cycles
是一种独立于架构的方法。
ftrace
是一个测量延迟的有趣工具,它对性能优化非常有用。