程序执行时间极短的运行时间

时间:2014-11-29 17:41:31

标签: c++

我查了一些关于如何计算代码的其他例子,但没有一个使用时间或时间似乎都有效(它们返回0)。但是,做了什么工作QueryPerformanceCounter。使用它的唯一缺点是它只在我阅读时可用于Windows。我的导师使用Mac,所以我无法将此代码交给他。这是我使用QueryPerformanceCounter时代码的样子。

#include <iostream>
#include "heapsort.h"
#include "quicksort.h"
#include "insertionsort.h"


using namespace std;


#include <windows.h>
//THE FOLLOWING CODE RETURNS RUNNING TIME IN MICROSECONDS. 
//https://stackoverflow.com/questions/1739259/how-to-use-queryperformancecounter
double PCFreq = 0.0;
__int64 CounterStart = 0;

void StartCounter()
{
    LARGE_INTEGER li;
    if (!QueryPerformanceFrequency(&li))
        cout << "QueryPerformanceFrequency failed!\n";

    PCFreq = double(li.QuadPart) / 1000000.0;

    QueryPerformanceCounter(&li);
    CounterStart = li.QuadPart;
}
double GetCounter()
{
    LARGE_INTEGER li;
    QueryPerformanceCounter(&li);
    return double(li.QuadPart - CounterStart) / PCFreq;
}


int main(){
    static const size_t SIZE = 150;
    int arr[] = { 685, 119, 938, 836, 721, 801, 738, 334, 739, 89, 917, 277, 708, 905, 978, 84, 620, 948, 409, 891, 447, 957, 673, 627, 546, 137, 456, 594, 878, 972, 722, 934, 383, 628, 103, 604, 132, 2, 428, 893, 212, 629, 646, 382, 348, 49, 306, 707, 156, 373, 733, 419, 323, 825, 112, 930, 432, 862, 830, 69, 994, 600, 226, 570, 759, 988, 289, 75, 232, 167, 292, 644, 10, 679, 607, 522, 967, 341, 989, 130, 326, 816, 503, 794, 303, 108, 915, 148, 258, 73, 206, 701, 897, 350, 713, 940, 764, 471, 936, 93, 163, 824, 950, 796, 98, 823, 465, 37, 102, 342, 243, 696, 687, 935, 459, 50, 553, 225, 562, 181, 453, 665, 525, 175, 768, 251, 996, 954, 925, 531, 962, 585, 250, 829, 777, 928, 76, 704, 565, 20, 422, 51, 125, 197, 588, 267, 850, 494, 699, 173 };


    StartCounter();
    heapSort<int> heap(arr, SIZE);
    cout << GetCounter() << endl;
    StartCounter();
    quickSort<int> quick(arr, 0, SIZE-1);
    cout << GetCounter() << endl;
    StartCounter();
    insertionSort<int> insertion(arr);
    cout << GetCounter() << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

如果所有平台都运行英特尔,您可以查看使用时间戳计数器(RDTSC)并围绕此编写自己的性能计数器。但它不是非常便携,并且有各种棘手的位(核心之间的漂移,可变时钟频率,除非你有禁用,等等)。一般来说,我会采用低技术方法来完成手头的任务,然后通过一个低技术计时器(即使是time a.out在shell)获得平均时间。