티스토리 뷰

Visual Studio 2012 사용


Performance Counter를 사용해 함수나 코드의 속도를 좀 더 정확히 측정해보자.


GetTickCount()보다 정확하다.


Performance Counter란?

- OS나 어플리케이션, 서비스, 드라이버가 잘 실행되고 있는지를 나타내는 정보에 사용하는 카운터를 의미함


이 카운터로 Performance Counter Frequency라는 주파수에 따라 1초당 진행되는 틱 수 계산하여 속도를 측정하는 방식을 말한다.


우리가 사용할 함수는 QueryPerformanceFrequency()와 QueryPerformanceCounter()이다.


1. 함수 설명


1) QueryPerformanceFrequency 함수 원형

BOOL WINAPI QueryPerformanceFrequency(
  _Out_ LARGE_INTEGER *lpFrequency
);

파라미터:

lpFrequency: 현재 performance counter 주파수의 포인터를 반환한다.


2) QueryPerformanceCounter 함수 원형

BOOL WINAPI QueryPerformanceCounter(
  _Out_ LARGE_INTEGER *lpPerformanceCount
);

파라미터:

lpPerformanceCount: 현재 performance counter의 값을 포인터로 반환한다.


2. 활용


main.cpp

{
	LARGE_INTEGER Frequency;
	LARGE_INTEGER BeginTime;
	LARGE_INTEGER Endtime;
	__int64 elapsed;
	double duringtime;
		
	//프로그램이나 클래스 시작부분에
	QueryPerformanceFrequency( &Frequency );

	//사용하고자 하는 부분에 다음 코딩
	QueryPerformanceCounter( &BeginTime );

	//////////////////////////////
	//프로그램 코드
	//////////////////////////////

	QueryPerformanceCounter( &Endtime );
	elapsed = Endtime.QuadPart- BeginTime.QuadPart; 
	duringtime = (double)elapsed / (double)Frequency.QuadPart;

	duringtime *=1000;	//ms로 변환
}


QueryPerformanceFrequency( &Frequency ) 구문은 CPU 주파수에 따른 1초당 진행되는 틱수를 나타낸다. 변동이 없어서 한번만 읽어주면 된다.

검사할 프로그램 시작 전에 BeginTime으로, 프로그램 코드 이후에 EndTime으로 PerformanceCounter를 입력 받는다.

두 개의 차이를 주파수 값으로 나눠주면 속도 측정 가능하다.

duringtime 이 마이크로 초 이기에 1000을 곱해 ms로 변환한다.


댓글