2014-11-29 1 views
0

나는 내 코드 시간을 측정하는 방법에 대한 다른 예제를 찾아 보았지만 크로노 또는 시간을 사용하는 코드는 전혀 작동하지 않는 것으로 나타났습니다 (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; 
} 
+0

_proformance profiling code injections_을 요구하십니까? 예 : 'gprof '와 함께 사용 가능합니다. 어떤 툴체인을 사용해야합니까? –

+0

@ πάνταῥεῖ 그게 무슨 뜻인지 모르겠습니다. Google은 이에 대한 정의도 반환하지 않습니다. 각 정렬 알고리즘의 소요 시간을 알아야합니다. 마이크로 초가 걸리지 만 세 가지 정렬 알고리즘을 비교하려면 여전히 필요합니다. 그건 그렇고, 나는 윈도우에있다. 나는 강요하는 도구가 있다고 생각하지 않지만 강사가 코드를 실행할 때 작동해야합니다. –

+0

Windows에서 모든 작업에 대해 정확한 마이크로 초 해상도를 얻으려면 문제가있을 수 있습니다. (10 분의 1) 밀리 초가 가장 좋은 방법입니다. –

답변

0

모든 플랫폼에서 인텔을 실행하는 경우 RDTSC (Time Stamp Counter)를 사용하여이 문제를 해결할 수 있습니다. 그러나 매우 휴대하기 어렵고 다양한 까다로운 비트 (코어 간 편차, 가변 클럭 주파수 등을 사용할 수없는 경우 제외)가 있습니다. 일반적으로 많은 시간 동안 작업을 수행하고 저전력 타이머 (심지어 쉘에서 time a.out)를 통해 평균 시간을 얻는 낮은 기술 접근 ​​방식을 선택합니다.

+0

감사. 저 기술 타이머 방법을 사용하여 다른 사람의 PC에서 실행할 수 있습니다. Hans Passant는 또한이 방법을 제안했습니다. 너희 둘에게 영광. –

관련 문제