如何计算C ++中函数的时间执行和CPU开销

时间:2013-05-22 07:42:03

标签: c++ visual-c++

我已经完成了一个函数的编写,我希望将函数的时间和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;
}

3 个答案:

答案 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“QueryPerformanceCounterQueryPerformanceFrequency,以获得更高精度的计时。

答案 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/