我怎样才能轻松地testingC代码?
有一个简单的库来衡量执行一部分C代码所需的时间吗? 我想要的是这样的:
int main(){ benchmarkBegin(0); //Do work double elapsedMS = benchmarkEnd(0); benchmarkBegin(1) //Do some more work double elapsedMS2 = benchmarkEnd(1); double speedup = benchmarkSpeedup(elapsedMS, elapsedMS2); //Calculates relative speedup }
如果图书馆让你做很多次运算,平均它们并计算时间差异,那也是非常棒的!
基本上,所有你想要的是一个高分辨率的计时器。 经过的时间当然只是时间上的差异,加速是通过除以每个任务的时间来计算的。 我已经包含了一个高分辨率的计时器的代码,至less应该在Windows和Unix工作。
#ifdef WIN32 #include <windows.h> double get_time() { LARGE_INTEGER t, f; QueryPerformanceCounter(&t); QueryPerformanceFrequency(&f); return (double)t.QuadPart/(double)f.QuadPart; } #else #include <sys/time.h> #include <sys/resource.h> double get_time() { struct timeval t; struct timezone tzp; gettimeofday(&t, &tzp); return t.tv_sec + t.tv_usec*1e-6; } #endif
使用time.h
定义的函数clock()
:
startTime = (float)clock()/CLOCKS_PER_SEC; /* Do work */ endTime = (float)clock()/CLOCKS_PER_SEC; timeElapsed = endTime - startTime;
在POSIX中,尝试getrusage 。 相关参数是RUSAGE_SELF,相关字段是ru_utime.tv_sec和ru_utime.tv_usec。
可能有现有的公用事业公司,但我怀疑大多数会采用某种样品或可能注射。 但是为了获得特定的代码段,你可能需要添加一个像你在示例中显示的计时器的调用。 如果您使用的是Windows,那么高性能计时器就可以工作。 我回答了类似的问题,并展示了可以做到这一点的示例代码。 对于Linux也有类似的方法。