프로그램의 시간 측정

출처 : http://hongyver.pe.kr/ttblog/category/프로그래밍디버깅

C 표준함수 clock() 을 이용

#include <stdio.h>
#include <time.h>


void main()
{
     clock_t t1,t2;
     int count=0;

     t1=clock();
     for (;;) {
          printf("기다리십시오. %d\n",count++);
          t2=clock();
          if (t2-t1 > 3*CLOCKS_PER_SEC) {
              break;
          }
     }
     printf("끝났습니다.\n");
}



Windows Mutimedia timer 의 timeGetTime() 함수 이용

DWORD dwStartTime = timeGetTime();
// 중간코드생략
DWORD dwEndTime = timeGetTime();
printf("%d ms", dwEndTime-dwStartTime);



Windows Management 의
QueryPerformanceFrequency/QueryPerformanceCounter() 함수이용


#define CHECK_TIME_START  __int64 freq, start, end; if (QueryPerformanceFrequency((_LARGE_INTEGER*)&freq))  {QueryPerformanceCounter((_LARGE_INTEGER*)&start);

#define CHECK_TIME_END(a,b) QueryPerformanceCounter((_LARGE_INTEGER*)&end);  a=(float)((double)(end - start)/freq*1000); b=TRUE;                        } else b=FALSE;

...

CHECK_TIME_START;
// 중간코드 생략
CHECK_TIME_END(Time, err);

printf("printf() 걸린 시간은.. %8.6f미리세컨입니다.",Time);


VC++6 의 Profile 사용
Project Setting 에서 Link 의 Enable profiling을 체크

사용자 삽입 이미지


Build의 Profile 선택

사용자 삽입 이미지


Profile 대화상자에서 원하는 Profile Type 선택 - 시간측정은 Function timing
Function converage와 Line Coverage 의 분석을 통해 함수의 점유율을 알수 있다.
점유율에 대한 이해는 아래 링크를...
http://www.debuglab.com/knowledge/coverage.html

사용자 삽입 이미지


그러면 아래와 같은 profile 탭에 결과가 나온다.

사용자 삽입 이미지



VS.NET 의 Profile 사용(PGO)

프로젝트 속성에서 C/C++ 탭에서 프로그램 데이타 베이스를 /Zi 이하로 설정
/ZI 일경우 /GL 옵션과 충돌

사용자 삽입 이미지


최적화 옵션에서 최적화를 /O[x] 중 원하는 것 선택
전체 프로그램 최적화에서 /GL 옵션 선택


사용자 삽입 이미지


코드생성 탭에서 기본 런타임 검사를 기본값으로 설정

사용자 삽입 이미지

링커탭에서 일반에 보면 증분링크 사용 안함(/INCREMENTAL:NO)

사용자 삽입 이미지


그러면 설정은 다 끝났다.
이제 빌드를 해야하는데 PGO를 위한 빌드는 빌드창에 프로필 기반 최적화라는 항목이 보인다.
이 항목중에 계측, 업데이트, 최적화, 계측된/최적화된 응용 프로그램 실행 이 있는데 이중 먼저 계측을 선택하여 PGD 파일을 생성한다.
다음 계측된/최적화된 응용 프로그램 실행을 눌러 실제 프로그램을 테스트/연습을 수행한다.
원하는 만큼 수행하여도 된다 이때 수행한 만큼 PGC 파일이 생성된다.
다음 최적화를 눌러 생성된 PGC 파일을 통해 최종 PGD 파일이 생성된다.


사용자 삽입 이미지


최종적으로 pgomrg.exe test.pgd /summary 를 실행해보면 요약된 정보를 얻을수 있다.
도스커맨드 창은 도구에 VisualStudio 2005 command Prompt를 이용하면 별도로 경로명을 지정하지 않아도 편리하게 이용할수 있다.

사용자 삽입 이미지



@CLK
이 방법은 디버깅시 Watch 창에 @CLK 를 입력하여 측정하는 방법이다.
간단하지만 요긴하게 써먹을수 있다.
아래 그림처럼 측정하고자 하는 구간의 첫번째 브레이크 포인터에
@CLK/1000,d 를 하면 초단위로 값을 볼수 있다.
그리고 마지막 브레이크 포인터에 @CLK=0 을 입력한다.
아래 그림을 보면 for문 수행하는 시간이 대략 548초 걸렸다.
디버깅 모드이므로 참고 정도로만 사용할것.

사용자 삽입 이미지

by Darksin | 2009/02/03 11:31 | 트랙백 | 덧글(1)

◀ 이전 페이지          다음 페이지 ▶