1

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

3 回答 3

6

在 C++11 中,您应该使用std::chrono::high_resolution_clockwhich 在后台使用系统提供的具有最小滴答周期的时钟源:

#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);
于 2013-05-22T07:49:07.463 回答
1

对于这个特定的代码,我很确定您的代码非常好。

短期内,您可能需要使用更精确的计时功能,如 Windows 的QueryPerformanceCounterQueryPerformanceFrequency以获得更高精度的计时。

于 2013-05-22T07:48:47.353 回答
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/

于 2013-05-22T07:59:37.450 回答