计算 C++ 中函数的执行时间(Visual Studio 2010)

Posted

技术标签:

【中文标题】计算 C++ 中函数的执行时间(Visual Studio 2010)【英文标题】:Calculate execution time of a function in c++ (visual studio 2010) 【发布时间】:2014-02-04 07:26:32 【问题描述】:

我正在使用 c++ 进行编码并使用 Visual Studio 2010。我正在尝试计算函数执行所需的时间,这是我的代码

        double sum=0;   
        clock_t start_s=clock();
        for(int j=1;j<size;j++)
        
            int key=data[j];
            int i=j-1;
            while(i>=0 && data[i]>key)
            
                data[i+1]=data[i];
                i=i-1;
            
            data[i+1]=key;
        
        clock_t stop_s=clock();
        sum=((double)(stop_s - start_s)/CLOCKS_PER_SEC);

但问题是时间计算为 0。如何以更小的单位测量时间

【问题讨论】:

野兔是你的答案我认为***.com/questions/1861294/… visual studio 在“int64”和“uint64”上给出错误 让您测量的东西花费更长的时间是显而易见的选择。如果您测量的内容非常短,您通常会测量可变性。 【参考方案1】:

clock() 将为您提供 1 毫秒的分辨率。 如果您想要更高的分辨率,请使用QueryPerformanceCounter 函数和QueryPerformanceFrequency

【讨论】:

或者,老套路:运行你的代码一百万次:D【参考方案2】:

一种可能的解决方案是运行此代码段,例如运行 100,000 次,然后计算平均时间

 double sum=0;   
    clock_t start_s=clock();

 int x = 0;

 while (x < 100000)
 
    for(int j=1;j<size;j++)
    
        int key=data[j];
        int i=j-1;
        while(i>=0 && data[i]>key)
        
            data[i+1]=data[i];
            i=i-1;
        
        data[i+1]=key;
          
    x++;
  
    clock_t stop_s=clock();
    sum=((double)(stop_s - start_s)/CLOCKS_PER_SEC)/100000; //average time

【讨论】:

【参考方案3】:

看起来clock() 在 Windows 上返回毫秒分辨率刻度。

要获得更好的粒度,您应该使用 Windows 高分辨率性能计数器。致电QueryPerformanceFrequencyQueryPerformanceCounter

【讨论】:

以上是关于计算 C++ 中函数的执行时间(Visual Studio 2010)的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2010 (C++) 中集成 MATLAB 代码

通过在 Visual C++ 中传递函数来创建进程

Visual C++ 上的 _nextafterf

Visual C++ - 覆盖从 DLL 导入的函数?

Visual C++ 函数突然变慢 170 毫秒(长 4 倍)

使用 Visual Studio 2017 发布 C++ 代码 [重复]