我已经完成了一个函数的编写,我希望将函数的时间和CPU执行与其他函数进行比较。这是计算时间执行的代码,但我不确定它的准确性。你有准确度代码来计算C ++中一个函数的时间和CPU支出吗?
//Only time execution. CPU spending?
#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
clock_t start, end;
start = clock();
for(int i=0;i<65536;i++)
cout<<i<<endl;
end = clock();
cout << "Time required for execution: "
<< (double)(end-start)/CLOCKS_PER_SEC
<< " seconds." << "\n\n";
return 0;
}
答案 0 :(得分:6)
在C ++ 11中,您应该使用std::chrono::high_resolution_clock
,它使用时钟源,系统提供最小的滴答周期:
#include <chrono>
auto start = std::chrono::high_resolution_clock::now();
//...
auto end = std::chrono::high_resolution_clock::now();
auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
答案 1 :(得分:1)
对于这个特定的代码,我非常确定你的代码是否正常。
在短时间内,您可能需要使用更精确的计时功能,例如Windows“QueryPerformanceCounter
和QueryPerformanceFrequency
,以获得更高精度的计时。
答案 2 :(得分:1)
我知道获得精确时间估算的最简单方法是使用OpenMP函数:
#include <stdio.h>
#include <omp.h>
int main() {
double dtime = omp_get_wtime();
foo();
dtime = omp_get_wtime() - dtime;
printf("time in seconds %f\n", dtime);
}
在gcc中使用-fopenmp进行编译。在visual studio中打开C ++ /语言支持下的OpenMP支持。顺便说一下,OpenMP现在可以在Visual Studio 2012 Express中使用。对于CPU时间分析,您可以尝试http://developer.amd.com/tools-and-sdks/heterogeneous-computing/amd-codeanalyst-performance-analyzer/