코드를 최적하는데 가장 필수적인 도구는 프로파일러다. 프로파일러는 어느 함수가 얼마나 많이 호출되었는지, 어느 정도의 수행 시간을 점유하는지 따위를 파악할 수 있도록 해주는 도구인데, 프로그래머라면 실제로 써본 적은 없더라도 이름은 많이 들어보았을 것이다.
유닉스 플랫폼에서 코드를 작성하고 있다면, 유닉스 컴파일러 시장은 이미 gcc가 대세를 이루고 있으므로 GNU Profiler라는 좋은 툴을 무료로 사용할 수 있다(GNU는 가난한 프로그래머에게 신의 축복이다). 그러나, 역시 중요한 플랫폼 중 하나인 윈도우에서는 Visual Studio와 잘 맞는 프로파일러를 구하기가 쉽지 않다. 물론, Visual Studio Team Suite 버전이라면 Visual Analyzer가 IDE에 포함되어 있기 때문에 쉽게 사용이 가능하지만, Team Suite 버전을 가지고 있지 않다면 난감할 수 밖에 없다. 그런 사람을 위해 마이크로소프트에서는 standalone 프로파일러를 제공하는데, Visual Studio 2008 SP1 이상이라면 적용 가능하다. Team Suite에 포함된 버전과 달리 커맨드 기반이라는 점이 조금 불편하긴 하지만, Team Suite처럼 비싼 버전을 가지고 있지 않은 사람들에게는 상당히 유용하다.
이 프로파일러는 마이크로소프트 다운로드 센터에서 무료로 배포하고 있다.
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=fd02c7d6-5306-41f2-a1be-b7dcb74c9c0b
x64 버전과 x86 버전이 있는데, 자신에게 맞는 버전을 선택하면 된다.
다운로드한 바이너리를 실행하여 프로파일러를 설치했다면, Visual Studio가 설치된 폴더에서 Team Tools\Performance Test라는 폴더에 프로파일러 관련 개체들이 설치되어 있을 것이다. x64 버전을 사용한다면 x64 폴더 밑의 개체들을 사용하면 된다. 프로파일러를 사용하는 방법은 다음과 같다.
1. 프로파일러(vsperfcmd)가 설치된 폴더를 Path에 추가한다. (x64라면 x64 폴더를 Path에 추가한다)
2. 프로파일링하고자 하는 개체(실행파일)를 빌드할 때, 링크 옵션에서 프로파일링을 설정한다. Project Property(Alt + F7) - Linker - Advanced - Profile 항목에서 설정하면 된다.
3. 적절한 폴더에 빌드 된 개체를 복사하고, 커맨드 프롬프트를 열어 vsinstr "your program.exe"을 실행한다. 원래의 실행 파일은 "your program.exe.orig"로 백업된다. 커맨드 프롬프트는 관리자 권한으로 실행해야 한다.
4. 프로파일러를 실행한다 : vsperfcmd /start:trace /output:"profile_file.vsp"
5. 원하는 시간 동안 프로그램을 실행하고, 종료한다.
6. 프로파일러 모니터링을 종료한다 : vsperfcmd /shutdown
7. vsperfreport를 사용하여 결과를 정리한다. 엑셀 파일 형태로 얻을 것이다 : vsperfreport profile_file.vsp /output:"your folder" /summary:all
자신이 작성한 프로그램과 실행 시간에 따라 프로파일링 파일(.vsp)은 크기가 매우 커질 수도 있다. 프로파일러를 사용할 정도라면, 최적화에 대한 잔소리를 늘어놓지 않아도 될 것 같다. 다시 한번 주의점을 강조하자면, 반드시 커맨드 프롬프트는 관리자 권한으로 실행한 뒤 프로파일러를 실행해야 한다. 권한 관련 에러를 받았다고 /admin:security 옵션을 만지작거릴 필요는 없다. (특히 VSP2347 관련 에러라면)
유닉스 플랫폼에서 코드를 작성하고 있다면, 유닉스 컴파일러 시장은 이미 gcc가 대세를 이루고 있으므로 GNU Profiler라는 좋은 툴을 무료로 사용할 수 있다(GNU는 가난한 프로그래머에게 신의 축복이다). 그러나, 역시 중요한 플랫폼 중 하나인 윈도우에서는 Visual Studio와 잘 맞는 프로파일러를 구하기가 쉽지 않다. 물론, Visual Studio Team Suite 버전이라면 Visual Analyzer가 IDE에 포함되어 있기 때문에 쉽게 사용이 가능하지만, Team Suite 버전을 가지고 있지 않다면 난감할 수 밖에 없다. 그런 사람을 위해 마이크로소프트에서는 standalone 프로파일러를 제공하는데, Visual Studio 2008 SP1 이상이라면 적용 가능하다. Team Suite에 포함된 버전과 달리 커맨드 기반이라는 점이 조금 불편하긴 하지만, Team Suite처럼 비싼 버전을 가지고 있지 않은 사람들에게는 상당히 유용하다.
이 프로파일러는 마이크로소프트 다운로드 센터에서 무료로 배포하고 있다.
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=fd02c7d6-5306-41f2-a1be-b7dcb74c9c0b
x64 버전과 x86 버전이 있는데, 자신에게 맞는 버전을 선택하면 된다.
다운로드한 바이너리를 실행하여 프로파일러를 설치했다면, Visual Studio가 설치된 폴더에서 Team Tools\Performance Test라는 폴더에 프로파일러 관련 개체들이 설치되어 있을 것이다. x64 버전을 사용한다면 x64 폴더 밑의 개체들을 사용하면 된다. 프로파일러를 사용하는 방법은 다음과 같다.
1. 프로파일러(vsperfcmd)가 설치된 폴더를 Path에 추가한다. (x64라면 x64 폴더를 Path에 추가한다)
2. 프로파일링하고자 하는 개체(실행파일)를 빌드할 때, 링크 옵션에서 프로파일링을 설정한다. Project Property(Alt + F7) - Linker - Advanced - Profile 항목에서 설정하면 된다.
3. 적절한 폴더에 빌드 된 개체를 복사하고, 커맨드 프롬프트를 열어 vsinstr "your program.exe"을 실행한다. 원래의 실행 파일은 "your program.exe.orig"로 백업된다. 커맨드 프롬프트는 관리자 권한으로 실행해야 한다.
4. 프로파일러를 실행한다 : vsperfcmd /start:trace /output:"profile_file.vsp"
5. 원하는 시간 동안 프로그램을 실행하고, 종료한다.
6. 프로파일러 모니터링을 종료한다 : vsperfcmd /shutdown
7. vsperfreport를 사용하여 결과를 정리한다. 엑셀 파일 형태로 얻을 것이다 : vsperfreport profile_file.vsp /output:"your folder" /summary:all
자신이 작성한 프로그램과 실행 시간에 따라 프로파일링 파일(.vsp)은 크기가 매우 커질 수도 있다. 프로파일러를 사용할 정도라면, 최적화에 대한 잔소리를 늘어놓지 않아도 될 것 같다. 다시 한번 주의점을 강조하자면, 반드시 커맨드 프롬프트는 관리자 권한으로 실행한 뒤 프로파일러를 실행해야 한다. 권한 관련 에러를 받았다고 /admin:security 옵션을 만지작거릴 필요는 없다. (특히 VSP2347 관련 에러라면)