[11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

26
GPG 2. Section 1. General Programming A Built-in Game Profiling Module DevRookie GPG Study, 2011. 7. 30. Hebory 게임에 내장되는 프로파일링 모듈

Upload: hebory

Post on 11-Jul-2015

1.516 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

GPG 2. Section 1. General Programming

A Built-in Game

Profiling ModuleDevRookie GPG Study, 2011. 7. 30. Hebory

게임에 내장되는 프로파일링 모듈

Page 2: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

프로파일링(Profiling)이란

무엇인가?

Page 3: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

게임 개발에서의 프로파일링

왜 필요할까?

성능 분석

병목 지점을 찾아서 성능 개선

문제가 될 만한 부분을 사전에 파악

Page 4: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

프로파일러란?

다른 응용 프로그램의 실행 상태를

모니터링 하는 도구

Page 5: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

시장에 나와있는

프로파일링 도구들…

Page 7: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

AMD Developer Central

AMD APP Profiler

http://developer.amd.com/tools/AMDAPPProfiler/Pages/default.aspx

Page 9: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

AMD ATI

GPU PerfStudio

http://developer.amd.com/archive/gpu/perfstudio/Pages/default.aspx

Page 10: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

UDK

Profiling

Page 11: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

Unity3D

Profiler

Page 12: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

프로파일링 모듈이

갖추어야 할 자격 조건

사용자가 응용 프로그램을 빠르게

그리고 정확하게 프로파일링 할 수 있어야 한다.

수행 부담이 적어야 한다.

여러 사용자가 다른 엔진 모듈들에 대해 신경쓰지 않고

자신의 시스템에서 개별적으로 할 수 있어야 한다.

프로파일러가 필요없어지면 완전히 제거할 수 있어야 한다.

Page 13: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

프로파일링은 어떻게 하는가?

문제가 되는 코드의 시작 지점에서

하나의 타임스탬프를 얻고,

끝 부분에서 다시 타임스탬프를 얻는다.

두번째 것에서 첫번째 것을 빼면

그 코드를 실행하는데 걸린 시간을 얻게 된다.

Page 14: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

책에 구현되어 있는 모습

Page 15: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

RDTSC란 무엇인가?

ReaD-Time Stamp Counter

x86 P5 명령어셋에 포함

Page 16: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

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);

}

Page 17: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

혹시 컴파일러가

RDTSC 를 모른다면…

__asm

{

__emit 0x0F

__emit 0x31

}

Page 18: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

RDTSC의 문제점

연속성 없는 값

멀티 코어 및 멀티 프로세스간 카운트 동기화 안됨

CPU 주파수의 변동성

전원관리기술에 의한 CPU 주파수 변동

Page 19: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

Windows API

QueryPerformanceCounter를

사용하면 해결 될까?

연속성 없는 값 (STA)

CPU 주파수의 변동성 (터보부스트)

Windows7 해결? XP 보다 부하가 커짐?

http://jacking.tistory.com/674

Page 20: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

Hl2profiler

http://cafe.naver.com/devrookie/4292

Page 22: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

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

디렉터리에 있습니다.

Page 23: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

OProfilehttp://oprofile.sourceforge.net/news/

Page 24: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

프로파일링 모듈을

직접 만들어야 하는 이유

아무리 잘 만든것도

아쉬운 점은 있다.

프로젝트에 특화된 기능이

필요하다.

공부를 위해?

Page 25: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

프로파일링 모듈을

직접 만들지 말아야 하는 이유

잘 만들어진 프로파일러들…

게임에 특화된 개발 엔진

제한된 개발 기간

기본 제공되는 프로파일러 활용도 잘 못하는…

Page 26: [11 0730] gpg 2.1.11 게임에 내장되는 프로파일링 모듈(공개)

결론

잘 만들어져 있는거

잘 활용 하세요~ ^^*