GPG 2. Section 1. General Programming
A Built-in Game
Profiling ModuleDevRookie GPG Study, 2011. 7. 30. Hebory
게임에 내장되는 프로파일링 모듈
프로파일링(Profiling)이란
무엇인가?
게임 개발에서의 프로파일링
왜 필요할까?
성능 분석
병목 지점을 찾아서 성능 개선
문제가 될 만한 부분을 사전에 파악
프로파일러란?
다른 응용 프로그램의 실행 상태를
모니터링 하는 도구
시장에 나와있는
프로파일링 도구들…
인텔 소프트웨어 네트워크
Intel VTune
http://software.intel.com/en-us/intel-sdp-home/
AMD Developer Central
AMD APP Profiler
http://developer.amd.com/tools/AMDAPPProfiler/Pages/default.aspx
NVIDIA
PerfHUD
http://developer.nvidia.com/nvidia-perfhud
AMD ATI
GPU PerfStudio
http://developer.amd.com/archive/gpu/perfstudio/Pages/default.aspx
UDK
Profiling
Unity3D
Profiler
프로파일링 모듈이
갖추어야 할 자격 조건
사용자가 응용 프로그램을 빠르게
그리고 정확하게 프로파일링 할 수 있어야 한다.
수행 부담이 적어야 한다.
여러 사용자가 다른 엔진 모듈들에 대해 신경쓰지 않고
자신의 시스템에서 개별적으로 할 수 있어야 한다.
프로파일러가 필요없어지면 완전히 제거할 수 있어야 한다.
프로파일링은 어떻게 하는가?
문제가 되는 코드의 시작 지점에서
하나의 타임스탬프를 얻고,
끝 부분에서 다시 타임스탬프를 얻는다.
두번째 것에서 첫번째 것을 빼면
그 코드를 실행하는데 걸린 시간을 얻게 된다.
책에 구현되어 있는 모습
RDTSC란 무엇인가?
ReaD-Time Stamp Counter
x86 P5 명령어셋에 포함
RDTSC를 이용해
체크 함수 만들기
#include <Windows.h>#include <cstdio>
unsigned __int64 GetTick(){
static unsigned __int32 nHigh, nLow;static unsigned __int64 nTick;
__asm {push eaxpush edxrdtscmov nLow, eaxmov nHigh, edxpop edxpop eax
}
nTick = nHigh;nTick <<= 32;nTick |= nLow;
return nTick;}
void Sample(){
for(int i = 0; i < 1000000; ++i){
__asm nop;}
}
void main() {
unsigned __int64 t;
t = GetTick();Sample();printf("64bit decimal %lld\n", GetTick() - t);
}
혹시 컴파일러가
RDTSC 를 모른다면…
__asm
{
__emit 0x0F
__emit 0x31
}
RDTSC의 문제점
연속성 없는 값
멀티 코어 및 멀티 프로세스간 카운트 동기화 안됨
CPU 주파수의 변동성
전원관리기술에 의한 CPU 주파수 변동
Windows API
QueryPerformanceCounter를
사용하면 해결 될까?
연속성 없는 값 (STA)
CPU 주파수의 변동성 (터보부스트)
Windows7 해결? XP 보다 부하가 커짐?
http://jacking.tistory.com/674
Hl2profiler
http://cafe.naver.com/devrookie/4292
Visual Studio 2010 Profilerhttp://msdn.microsoft.com/ko-kr/library/z9z62c29.aspx
Visual Studio 2010 Profilerhttp://msdn.microsoft.com/ko-kr/library/z9z62c29.aspx
네이티브 API를 사용하려면
프로젝트에 VSPerf.h 헤더 파일을 포함하고
VSPerf.lib를 추가해야 합니다.
VSPerf.h 및 VSPerf.lib는
기본적으로 <drive>:\Program Files\Microsoft Visual Studio 9\Team Tools\Performance Tools\PerfSDK
디렉터리에 있습니다.
OProfilehttp://oprofile.sourceforge.net/news/
프로파일링 모듈을
직접 만들어야 하는 이유
아무리 잘 만든것도
아쉬운 점은 있다.
프로젝트에 특화된 기능이
필요하다.
공부를 위해?
프로파일링 모듈을
직접 만들지 말아야 하는 이유
잘 만들어진 프로파일러들…
게임에 특화된 개발 엔진
제한된 개발 기간
기본 제공되는 프로파일러 활용도 잘 못하는…
결론
잘 만들어져 있는거
잘 활용 하세요~ ^^*
Top Related