게임에서 흔히 쓰이는
최적화 전략
엄윤섭
uhmgoon@gmail.com
기본적인 이야기
• 기본적인데 잘 안되는 이유
✓ 바쁘니까

• 기본적인데 잘 안고치는 이유
✓ 돌아가니까
✓ 장비가 좋아지니까
최적화
• 다양한 의미의 최적화
• 공간 최적화
✓ 요즘은 뒷전
✓ 사실상 개발비로 제한

• 속도 최적화
✓ 항상 중요
속도 최적화
• 게임은 무조건 빠르게!
✓ 화려한 그래픽
✓ 부드러운 애니메이션
✓ 현실적인 상호작용
✓ 칼같은 조작감의 밑거름

• ‘빠르다’의 기준
✓ 감이 아니라 측정 결과로 비교
측정
• 대기시간
✓ RESPONSE TIME
✓ LATENCY

• 처리속도
✓ THROUPUT

* TURN AROUND TIME
프로파일러
• 직접 만들어 쓴다
✓ 부하가 적다 (꼭 필요한 데이터만)
✓ 실제 성능과 근접한 수치
✓ 번거롭다

• 남이 만든걸 쓴다
✓ 자세한 추세 파악이 가능
✓ 그중에 으뜸은 인텔 VTune
처리속도 최적화
일을 시작한 후,
일하는 시간동안 얼마나 많은 양의

유효한 결과를
낼 수 있느냐
작업량 최적화

원하는 결과를 내는 데에
쓸모 없는 일을 줄이는 것
데이터 최적화
컴퓨팅 : 데이터를 처리하는 것.

데이터를 줄이는 것이
최적화의 가장 기본
데이터 양을 줄이면 당연히
처리가 빨리 끝남!
데이터 양과 계산량
• 빅-오 (Big-O) 표기법
✓ 데이터양과 처리시간 사이의 관계를

나타내는 함수

•
•
•
•

O( n )
O( n2 )
O( en )
O( 1 )
오래된 기법들
• LOD
• MIPMAP
• HSR
MIPMAP의 예
경험 사례
• 클라이언트 용량 약 10GB
✓ 대부분은 고해상도 텍스쳐
✓ 국내 OK
✓ 해외 NG (중국,태국,남미)

• 텍스쳐 MIP레벨을 강제로 줄여서 배포
✓ 클라이언트 용량 약 4GB로 절감
알고리듬 최적화
같은 데이터를 가지고

더 효율적인 과정을
통해 처리하는 것
흔한 최적화
• 삽입 정렬을 퀵 정렬로.
• 선형 검색을 해쉬 함수로.
• 백트래킹을 다이내믹 프로그래밍으로.
• 깊이우선 탐색을 A*로.
알고리듬 최적화 주의
• 동일한 결과 보장
• 속도와 메모리 사용량의 관계
• 데이터 양 고려
저수준 최적화
같은 데이터, 같은 처리 과정을
기계가 더 빠르게 수행할 수 있도록

다듬는 일
10% 내외의 성능향상 기대
스크립트 최적화
스크립트를 네이티브로 바꾸면
확실한 성능향상 (해당 부분은 5~10배)
하지만, 전체에서 차지하는 비율이 작은 경우가 대부분
네이티브 최적화
CPU 고유의 특성을 살리는 코드를 짜는 일
분기예측,캐시,정수/소수혼합, 고유 명령셋 등
등등
(어셈블리가 동원되기도….)

단, 컴파일러 최적화와 비교해야 함
경험 사례
• 스크립트 병목은 수시로 네이티브로
• 네이티브 최적화는 컴파일러로
✓ 컴파일러 선택이 중요
✓ 최신버전이 일반적으로 성능이 우수
✓ 그중 으뜸은 인텔 컴파일러
중간 정리
• 처리속도 최적화
✓ 데이터 최적화
✓ 알고리듬 최적화
✓ 저수준 최적화

• 대기시간 최적화
메모리와 데이터
컴퓨팅 : 데이터를 처리하는 것

메모리 : 데이터가 담겨 있는 장치
메모리 계층
• Memory Heirachy
✓ 비쌀수록 빠르고 용량이 적다.
응답속도
레지스터
CPU캐시
시스템 메모리
SSD
HDD
클라우드

CPU 클럭 사이클

0.3 ns 미만
1~2 ns
30~50 ns
0....
대기시간 최적화
데이터가 오가는 데 걸리는 CPU의

대기시간이 줄도록
만드는 일
즉, 줄어든 시간만큼
다른 유용한 일을 할 수 있음
캐시의 사용
데이터를 느린 곳에서 빠른 곳으로

미리 옮겨놓는 일
각 게임만의 고유한 특성을 반영하면
더 지능적인 캐시 가능
캐시 전략
• 싱글플레이어 게임
✓ 100% 예측가능

• 온라인 멀티플레이어 게임
✓ 다른 사용자의 활동은 예측 불가능
✓ 휴리스틱이 중요
✓ 통계기반캐싱, Lazy Deletion,
경험 사례
• 캐릭터 그래픽 캐시 전략
✓ 기본 : 캐릭터 스폰시 로드
✓ AI캐릭터 : 모두 프리캐시
✓ 퇴장한 플레이어 : Lazy Deletion

• 물리연산 데이터
✓ 코어가 남으면 메인메모리에서 캐싱
✓ CP...
병렬화
컴퓨터가

둘 이상의 작업을 동시
에
하게 만드는 일.
병렬화 대상
• 데이터를 이동시키는 시간동안 다른 유의미
한 일을 하는 것에 중점
• 그 외에도 렌더링, 물리연산 등 CPU를 대기
하게 만드는 작업이 많음.
동기화와 비동기화
• 동기화 : 확인절차를 거치고 다음으로 진행
• 비동기화 : 확인절차 없이 다음으로 진행
• 병렬화 : 비동기적으로 진행한 후 동기화
경험 사례
• 비동기 방식 로딩 도입
✓ 플레이어 진입시 자리만 마련하고 로딩 요청

(비동기)
✓ 그래픽 데이터 구성은 로딩 완료 신호가 뜰 때
(동기화)

• 100ms 이상의 히치 90% 이상 감소
마무리
• 최적화는 측정이 중요!
• 처리속도 최적화는 데이터, 알고리듬, 저수준
• 대기속도 최적화는 메모리 위계를 염두
• 질문?
Upcoming SlideShare
Loading in...5
×

게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013

1,084

Published on

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,084
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013

  1. 1. 게임에서 흔히 쓰이는 최적화 전략 엄윤섭 uhmgoon@gmail.com
  2. 2. 기본적인 이야기 • 기본적인데 잘 안되는 이유 ✓ 바쁘니까 • 기본적인데 잘 안고치는 이유 ✓ 돌아가니까 ✓ 장비가 좋아지니까
  3. 3. 최적화 • 다양한 의미의 최적화 • 공간 최적화 ✓ 요즘은 뒷전 ✓ 사실상 개발비로 제한 • 속도 최적화 ✓ 항상 중요
  4. 4. 속도 최적화 • 게임은 무조건 빠르게! ✓ 화려한 그래픽 ✓ 부드러운 애니메이션 ✓ 현실적인 상호작용 ✓ 칼같은 조작감의 밑거름 • ‘빠르다’의 기준 ✓ 감이 아니라 측정 결과로 비교
  5. 5. 측정 • 대기시간 ✓ RESPONSE TIME ✓ LATENCY • 처리속도 ✓ THROUPUT * TURN AROUND TIME
  6. 6. 프로파일러 • 직접 만들어 쓴다 ✓ 부하가 적다 (꼭 필요한 데이터만) ✓ 실제 성능과 근접한 수치 ✓ 번거롭다 • 남이 만든걸 쓴다 ✓ 자세한 추세 파악이 가능 ✓ 그중에 으뜸은 인텔 VTune
  7. 7. 처리속도 최적화 일을 시작한 후, 일하는 시간동안 얼마나 많은 양의 유효한 결과를 낼 수 있느냐
  8. 8. 작업량 최적화 원하는 결과를 내는 데에 쓸모 없는 일을 줄이는 것
  9. 9. 데이터 최적화 컴퓨팅 : 데이터를 처리하는 것. 데이터를 줄이는 것이 최적화의 가장 기본 데이터 양을 줄이면 당연히 처리가 빨리 끝남!
  10. 10. 데이터 양과 계산량 • 빅-오 (Big-O) 표기법 ✓ 데이터양과 처리시간 사이의 관계를 나타내는 함수 • • • • O( n ) O( n2 ) O( en ) O( 1 )
  11. 11. 오래된 기법들 • LOD • MIPMAP • HSR
  12. 12. MIPMAP의 예
  13. 13. 경험 사례 • 클라이언트 용량 약 10GB ✓ 대부분은 고해상도 텍스쳐 ✓ 국내 OK ✓ 해외 NG (중국,태국,남미) • 텍스쳐 MIP레벨을 강제로 줄여서 배포 ✓ 클라이언트 용량 약 4GB로 절감
  14. 14. 알고리듬 최적화 같은 데이터를 가지고 더 효율적인 과정을 통해 처리하는 것
  15. 15. 흔한 최적화 • 삽입 정렬을 퀵 정렬로. • 선형 검색을 해쉬 함수로. • 백트래킹을 다이내믹 프로그래밍으로. • 깊이우선 탐색을 A*로.
  16. 16. 알고리듬 최적화 주의 • 동일한 결과 보장 • 속도와 메모리 사용량의 관계 • 데이터 양 고려
  17. 17. 저수준 최적화 같은 데이터, 같은 처리 과정을 기계가 더 빠르게 수행할 수 있도록 다듬는 일 10% 내외의 성능향상 기대
  18. 18. 스크립트 최적화 스크립트를 네이티브로 바꾸면 확실한 성능향상 (해당 부분은 5~10배) 하지만, 전체에서 차지하는 비율이 작은 경우가 대부분
  19. 19. 네이티브 최적화 CPU 고유의 특성을 살리는 코드를 짜는 일 분기예측,캐시,정수/소수혼합, 고유 명령셋 등 등등 (어셈블리가 동원되기도….) 단, 컴파일러 최적화와 비교해야 함
  20. 20. 경험 사례 • 스크립트 병목은 수시로 네이티브로 • 네이티브 최적화는 컴파일러로 ✓ 컴파일러 선택이 중요 ✓ 최신버전이 일반적으로 성능이 우수 ✓ 그중 으뜸은 인텔 컴파일러
  21. 21. 중간 정리 • 처리속도 최적화 ✓ 데이터 최적화 ✓ 알고리듬 최적화 ✓ 저수준 최적화 • 대기시간 최적화
  22. 22. 메모리와 데이터 컴퓨팅 : 데이터를 처리하는 것 메모리 : 데이터가 담겨 있는 장치
  23. 23. 메모리 계층 • Memory Heirachy ✓ 비쌀수록 빠르고 용량이 적다. 응답속도 레지스터 CPU캐시 시스템 메모리 SSD HDD 클라우드 CPU 클럭 사이클 0.3 ns 미만 1~2 ns 30~50 ns 0.1 ms 8 ms 10 ms 이상 동일 4~10 사이클 100~150 사이클 100만 사이클 이상 10억 사이클 이상 10억 사이클 이상
  24. 24. 대기시간 최적화 데이터가 오가는 데 걸리는 CPU의 대기시간이 줄도록 만드는 일 즉, 줄어든 시간만큼 다른 유용한 일을 할 수 있음
  25. 25. 캐시의 사용 데이터를 느린 곳에서 빠른 곳으로 미리 옮겨놓는 일 각 게임만의 고유한 특성을 반영하면 더 지능적인 캐시 가능
  26. 26. 캐시 전략 • 싱글플레이어 게임 ✓ 100% 예측가능 • 온라인 멀티플레이어 게임 ✓ 다른 사용자의 활동은 예측 불가능 ✓ 휴리스틱이 중요 ✓ 통계기반캐싱, Lazy Deletion,
  27. 27. 경험 사례 • 캐릭터 그래픽 캐시 전략 ✓ 기본 : 캐릭터 스폰시 로드 ✓ AI캐릭터 : 모두 프리캐시 ✓ 퇴장한 플레이어 : Lazy Deletion • 물리연산 데이터 ✓ 코어가 남으면 메인메모리에서 캐싱 ✓ CPU아키텍쳐에 맞춘 데이터 사이즈
  28. 28. 병렬화 컴퓨터가 둘 이상의 작업을 동시 에 하게 만드는 일.
  29. 29. 병렬화 대상 • 데이터를 이동시키는 시간동안 다른 유의미 한 일을 하는 것에 중점 • 그 외에도 렌더링, 물리연산 등 CPU를 대기 하게 만드는 작업이 많음.
  30. 30. 동기화와 비동기화 • 동기화 : 확인절차를 거치고 다음으로 진행 • 비동기화 : 확인절차 없이 다음으로 진행 • 병렬화 : 비동기적으로 진행한 후 동기화
  31. 31. 경험 사례 • 비동기 방식 로딩 도입 ✓ 플레이어 진입시 자리만 마련하고 로딩 요청 (비동기) ✓ 그래픽 데이터 구성은 로딩 완료 신호가 뜰 때 (동기화) • 100ms 이상의 히치 90% 이상 감소
  32. 32. 마무리 • 최적화는 측정이 중요! • 처리속도 최적화는 데이터, 알고리듬, 저수준 • 대기속도 최적화는 메모리 위계를 염두 • 질문?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×