2016-06-23 3 views
0

WindowsC++에있는 코드 줄의 실행 시간을 어떻게 측정 할 수 있습니까?C++에서 함수 호출의 실행 시간 측정

while(...) //read a single record from a csv file until EOF 
{ 
    ... 
    while(...) // split the record into components based on delimiter 
    { 
     ... 
    } 
    //insert into boost::multi_index_container 
} 

나는 모든 레코드를 삽입하는 데 필요한 시간을 찾을 필요가 있지만, 루프의 실행 시간없이 다음과 같이 나는 boost::multi_index_container에 대한 1,00,000 기록을 삽입하고있다. timer 또는 삽입 기능 직전에 함수를 호출하고 함수 호출 직후 경과 시간을 계산하면 결과로 0 nanoseconds이됩니다. 그래서 저는 개별 시간을 합산하여 시간을 계산할 수 없습니다. 해결 방안은 무엇인가?

+0

원칙적으로 다음과 같이 처리 할 수 ​​있습니다. 1. 빈 루프의 시간을 측정합니다 (단, 최적화되지 않았는지 확인하십시오). 2. 삽입 루프의 시간을 측정하십시오. 3. 차이를 가져라. 측정을 원한다면 악의적 인 코드가 아니라 최적화 된 코드를 측정해야합니다. 그리고 나서 기회가 생깁니다. 옵티마이 저는 더 힘들게 만듭니다. 어셈블러 출력을 확인하여 측정 한 것을 측정하는지 확인하십시오. 파일 읽기 시간도 원하지 않으므로 마지막으로 필요한 것을 얻기 위해 몇 가지 추가 단계와 차이점을 생각해 볼 수 있습니다. – BitTickler

+0

왜이 측정이 필요한지 궁금합니다. – K117

+0

@pradyot : Windows 시스템 용 솔루션을 원합니다. – Jackzz

답변

2

Windows에서는 QueryPerformanceCounter으로 정확한 측정 값을 얻을 수 있습니다.

+0

QPC는 각 단일 삽입에 대해 실행 시간을 0으로 지정합니다. 내가 언급했듯이, 하나의 lakh 레코드를 삽입하기위한 총 실행 시간이 필요하다. – Jackzz

+0

CPU 사이클을 어떻게 든 세세하게 측정해야 할 필요가있다. – goobliata

+0

위에서 언급했듯이 측정하려는 것이 너무 작 으면 여러 번 수행하는 데 걸리는 시간을 측정합니다 (측정 가능한 시간이 필요합니다). 그런 다음 매직 작업은 "division"입니다 : N이 작업이 수행 된 횟수 인 경우 total_time/N입니다. 루프 및 파일 액세스가 total_time에 추가되기 때문에 삽입 작업없이 동일한 코드의 비교 실행이 필요합니다. 그런 다음''(total_time - total_time_compare)/N''. – BitTickler

0

가능한 복제본 How to calculate a time difference in C++. 여러 가지 방법이 있습니다. 내가 좋아하는 것은 크로노를 사용합니다.

#include <iostream> 
    #include <chrono> 

    using namespace std; 
    using namespace std::chrono; 



    int main() 
    { 
    high_resolution_clock::time_point t1 = high_resolution_clock::now(); 
    //your code here 
    high_resolution_clock::time_point t2 = high_resolution_clock::now(); 

    auto duration = duration_cast<microseconds>(t2 - t1).count(); 

    cout << duration; 
    return 0; 
    } 
+0

계산 된 시간은 마이크로 초입니다. –

+0

나는 이미 그것을 시도했다 ... 다시 루프를 제외하고 실행 시간을주지 않을 것이다 – Jackzz

+0

그것은 내 컴퓨터에서 잘 작동한다. 내가 물으면 너는 정확히 무엇을하고 있니? 링크에있는 다른 방법을 시도 했습니까? –