본문 바로가기

Programing/C/C++/STL

Source Code 수행속도 측정하는 방법

Entering Hyperspace
Entering Hyperspace by Éole 저작자 표시비영리동일조건 변경허락

코딩을 하다보면 특정 코드 부분의 수행 속도를 측정해야 될때가 있다.
아래 3개의 코드가 수행 속도를 측정하는 코드들이다.

* Code2가 셋 중에서는 가장 정확하다.


[Code 1] time.h를 이용하는 방법
#include 

int main( void )
{
  clock_t startTime = clock(); // 코드 실행 전 시간을 구한다.
  
  // 여기에 수행속도를 측정할 코드를 입력
  
  clock_t  endTime = clock(); // 코드 실행 후 시간을 구한다.

  // 코드 실행 시간을 초로 변환한다.
  double codeExcuteTime = ( ( double )( endTime - startTime ) ) / CLOCKS_PER_SEC;

  return 0;
}


[Code 2] Window의 High-Resolution Performance Counter 이용하는 방법

#include 

int main( int argc, char ** argv )
{
  LARGE_INTEGER startCounter, endCounter, frequency;
  
  QueryPerformanceFrequency( &frequency); // 주파수(1초당 증가되는 카운트수)를 구한다.
  QueryPerformanceCounter( &startCounter ); // 코드 실행 전 카운트를 구한다.
  
  // 여기에 수행속도를 측정할 코드를 입력
  
  QueryPerformanceCounter( &endCounter ); // 코드 실행 후 카운트를 구한다.
  
  // 코드 실행 시간을 초로 변환한다.
  double codeExcuteTime = ( double )( endCounter2.QuadPart - startCounter1.QuadPart) / ( double ) frequency.QuadPart;
  
  return 0;
}


[Code 3] Assemble를 이용하는 방법

__int64 nStartcount;
_asm rdtsc
_asm lea ebx, nStartcount
// 코드 실행 전 시간을 구한다.
_asm mov dword ptr [ebx], eax
_asm mov dword ptr [ebx+4], edx

// 여기에 수행속도를 측정할 코드를 입력

__int64 nEndcount;
_asm rdtsc  
_asm lea ebx, nEndcount
// 코드 실행 후 시간을 구한다.
_asm mov dword ptr [ebx],  eax
_asm mov dword ptr [ebx+4], edx

double nTime = ( nEndcount - nStartcount ) / 2000000.0; // 코드 실행 시간을 초로 변환한다.

'Programing > C/C++/STL' 카테고리의 다른 글

[C/C++]메모리 영역 구분  (0) 2009.08.27
[C++] 멤버 함수포인터 사용하기  (0) 2009.07.22
[C++] explicit 키워드  (0) 2009.07.14
OpenMP 라고 아십니까??  (0) 2009.06.30
CppUnit CookBook  (0) 2009.04.29