当前位置:  开发笔记 > 编程语言 > 正文

寻找基准测试代码片段(c ++)

如何解决《寻找基准测试代码片段(c++)》经验,为你挑选了3个好方法。

我的程序中的一些加载例程需要很长时间才能完成.我想要一个快速的小片段来检查函数执行的时间.我的意思是"最好没有第三方图书馆".

也许就像花费系统时间一样简单?

start = current_system_time()
load_something()
delta = current_system_time()-start
log_debug("load took "+delta)

编辑:有问题的目标操作系统是Windows.



1> Robert Gould..:

你的回答:是的

警告:这将不会在multihtreaded代码或多核计算机上工作,你需要一个强大的挂钟计时器.所以我建议你使用omp的wallclock.OMP包含在VC和GCC中,大多数编译器及其标准您不必担心消失

#include 

// Starting the time measurement
double start = omp_get_wtime();
// Computations to be measured
...
// Measuring the elapsed time
double end = omp_get_wtime();
// Time calculation (in seconds)


确保链接到-lgomp

2> Vadim Ferder..:
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)

namespace win32 {
    #include 
}

class timer
{
    win32::LARGE_INTEGER start_time_;
public:
    timer() { QueryPerformanceCounter( &start_time_ ); }
    void   restart() { QueryPerformanceCounter( &start_time_ ); }
    double elapsed() const
    {
        win32::LARGE_INTEGER end_time, frequency;
        QueryPerformanceCounter( &end_time );
        QueryPerformanceFrequency( &frequency );
        return double( end_time.QuadPart - start_time_.QuadPart )
            / frequency.QuadPart;
    }
};

#else

#include 

class timer
{
    clock_t _start_time;
public:
    timer() { _start_time = clock(); }
    void   restart() { _start_time = clock(); }
    double elapsed() const
    {
        return double(clock() - _start_time) / CLOCKS_PER_SEC;
    }
};

#endif

template< typename Func >
double measure_time( Func f )
{
    timer t;
    f();
    return t.elapsed();
}



3> jvasak..:

这是一种快速而又脏的方式来计算一块C/C++代码.你需要#include ,这应该是一个标准的标题...

struct timeval start, end;
gettimeofday(&start, NULL);
// benchmark code
gettimeofday(&end, NULL);
long long time =   (end.tv_sec * (unsigned int)1e6 +   end.tv_usec) - 
                 (start.tv_sec * (unsigned int)1e6 + start.tv_usec);

这应该在现代Linux系统上提供1-2μs的分辨率(你使用的操作系统是什么?),这意味着它不适合学习<10μs的项目.但是,你似乎没有那种情况.

更新:基于指定的操作系统... gettimeofday()的Windows实现

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有