MSDN Magazine blog...
2007/01/12 09:19
RSS 구독을 하고 있는데...
2007년 2월 MSDN 이 온라인상으로 발매...
링크를 따라 가봤더니 한글로도...

http://blogs.msdn.com/msdnmagazine/archive/2007/01/11/1451594.aspx



2007/01/12 09:19 2007/01/12 09:19
TAG ,
Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

  • TWEETY 2007/01/15 08:38  댓글주소  수정/삭제  댓글쓰기
    링크를 따라 가봤더니 영언데? -.-;

  • 프로그램의 시간(성능)측정
    2006/12/29 14:31

    C 표준함수 clock() 을 이용

    (Language : c)
    1. #include <stdio.h>
    2. #include <time.h>
    3.  
    4. void main()
    5. {
    6.      clock_t t1,t2;
    7.      int count=0;
    8.  
    9.      t1=clock();
    10.      for (;;) {
    11.           printf("기다리십시오. %d\n",count++);
    12.           t2=clock();
    13.           if (t2-t1 > 3*CLOCKS_PER_SEC) {
    14.               break;
    15.           }
    16.      }
    17.      printf("끝났습니다.\n");
    18. }

    Windows Mutimedia timer 의 timeGetTime() 함수 이용

    (Language : c)
    1. DWORD dwStartTime = timeGetTime();
    2. // 중간코드생략
    3. DWORD dwEndTime = timeGetTime();
    4. printf("%d ms", dwEndTime-dwStartTime);

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


    (Language : c)
    1. #define CHECK_TIME_START  __int64 freq, start, end; if (QueryPerformanceFrequency((_LARGE_INTEGER*)&freq))  {QueryPerformanceCounter((_LARGE_INTEGER*)&start);
    2.  
    3. #define CHECK_TIME_END(a,b) QueryPerformanceCounter((_LARGE_INTEGER*)&end);  a=(float)((double)(end - start)/freq*1000); b=TRUE;                        } else b=FALSE;
    4.  
    5. ...
    6.  
    7. CHECK_TIME_START;
    8. // 중간코드 생략
    9. CHECK_TIME_END(Time, err);
    10.  
    11. 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초 걸렸다.
    디버깅 모드이므로 참고 정도로만 사용할것.
    사용자 삽입 이미지




    2006/12/29 14:31 2006/12/29 14:31
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

    1. Subject: 수행시간 측정

      Tracked from 냇가의 흐르는 물처럼... 2007/02/06 18:07  삭제

      1. clock() 이용 // 시작clock_t beginTime;clock_t endTime;beginTime = clock(); // 수행endTime = clock();수행 시간 = (double)(endTime - beginTime) / CLOCKS_PER_SEC 2. timeGetTime() 또는 GetTickCount()해더 파일 : mmsystem.h라이브러리 :..

  • seyool 2009/07/16 14:06  댓글주소  수정/삭제  댓글쓰기
    좋은 정보 감사합니다..
    pgomrg.exe가 오타인거 같네요..
    이거때문에 왜 2008에는 없는걸까 좌절했는데, pgomgr.exe였군요 ㅎㅎ
  • 비밀방문자 2010/03/27 16:50  댓글주소  수정/삭제  댓글쓰기
    관리자만 볼 수 있는 댓글입니다.

  • 비주얼스튜디오에서 DDK build를...
    2006/12/22 10:24

    DriverStudio를 설치해서 VC6에서 DDK 빌드를 한다.
    비주얼스튜디오 IDE를 사용해서 편하긴 한데 웬지 모를 존재의 무거움(?)이랄까?
    매번 드라이버스튜디오를 설치해야하고 환경설정해야하고...
    가장 중요한건 돈주고 사야한다는거...

    googling 하다가 알아낸 것들...

    1. http://www.osronline.com/article.cfm?article=43 에서 DDKBUILD를 다운받아 비주얼스튜디오 또는 프로젝트 폴더에 복사해 넣은다음
    2. VC6 또는 VS.NET에서 New Project를 Makefile project로 프로젝트 생성하고 - build command line에는 ddkbuild -WNET checked . -ceZ 이정도로 적당히 설정/
    3. SOURCE, MAKE 파일 및 소스파일등을 생성하고 빌드를 수행하면 된다.

    VS.NET에서 New Project를 Makefile로 생성해서 DDK를 빌드하는 방법에 대해 자세하게 나와있다.
    http://www.hollistech.com/Resources/ddkbuild/ddkbuild.htm
    영어 알레리기가 있는분은 somma님 블러그를 보시길...
    (http://somma.egloos.com/2710282)

    사용자 삽입 이미지

    CodeProject에 있는 위저드를 통한 DDK 빌드 환경
    http://www.codeproject.com/tools/driverwizard.asp
    project wizard를 만드는게 일이 되겠지만 한번 만들어 놓으면 좋을듯한데...

    사용자 삽입 이미지

    그외에...
    http://www.codeproject.com/macro/ddkwizard.asp


    DDK 빌드하다가
    regmlib.lib(reglib.obj) : error LNK2026: module unsafe for SAFESEH image.
    위와 같은 에러가 발생하면 set NO_SAFESEH=1 와 같이 ddkbuild.bat 또는 ddkbuild.cmd에 설정하도록 한다.

    2003 DDK를 설치했다면
    XP를 위한 빌드는
    ddkbuild -WNETXP [checked/free] . -ceZ
    2K를 위한 빌드는
    ddkbuild -WNET2K [checked/free] . -ceZ

    XP DDK를 설치했다면 각각 아래와 같다.
    ddkbuild -WXP [checked/free] . -ceZ
    ddkbuild -WXP2K [checked/free] . -ceZ

    2006/12/22 10:24 2006/12/22 10:24
    Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

    1. Subject: DDK버전 과 Windows 버전 그리고 환경설정

      Tracked from 홍가일보 2007/03/20 13:55  삭제

      Windows 버전 Windows VistaWindows Server 2003 with Service Pack 1 (SP1)Windows XP with Service Pack 2 (SP2)Windows Server 2003 Windows XP Professional x64 EditionWindows XP with Service Pack 1 (SP1)Windows XP Windows 2000 DDK 버전 Windows Longhorn, ..

    2. Subject: DDKBUILD.CMD로 DDK빌드시 SOURCES 옵션

      Tracked from 홍가일보 2007/06/21 09:40  삭제

      지난 포스팅에 DDKBUILD.CMD를 통해 비주얼 스튜디오에서 드라이버 빌드를 하고 있는데...사용하다 불편한게 있어서 몇가지 알아내 SOURCES의 옵셥설정.MAP파일 생성하고 싶을때SOURCES 파일에 아래 ..