Miz*_*zor 25 c++ windows time benchmarking
我的程序中的一些加载例程需要很长时间才能完成.我想要一个快速的小片段来检查函数执行的时间.我的意思是"最好没有第三方图书馆".
也许就像花费系统时间一样简单?
start = current_system_time()
load_something()
delta = current_system_time()-start
log_debug("load took "+delta)
Run Code Online (Sandbox Code Playgroud)
编辑:有问题的目标操作系统是Windows.
Rob*_*uld 19
你的回答:是的
警告:这将不会在multihtreaded代码或多核计算机上工作,你需要一个强大的挂钟计时器.所以我建议你使用omp的wallclock.OMP包含在VC和GCC中,大多数编译器及其标准您不必担心消失
#include <omp.h>
// 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)
Run Code Online (Sandbox Code Playgroud)
Vad*_*rer 14
#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
namespace win32 {
#include <windows.h>
}
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 <ctime>
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();
}
Run Code Online (Sandbox Code Playgroud)
这是一种快速而又脏的方式来计算一块C/C++代码.你需要#include <sys/time.h>,这应该是一个标准的标题...
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);
Run Code Online (Sandbox Code Playgroud)
这应该在现代Linux系统上提供1-2μs的分辨率(你使用的操作系统是什么?),这意味着它不适合学习<10μs的项目.但是,你似乎没有那种情况.
更新:基于指定的操作系统... gettimeofday()的Windows实现
| 归档时间: |
|
| 查看次数: |
20459 次 |
| 最近记录: |