알라딘MGG와이드바


게임 프로그래밍 패턴 Part 6 - 최적화 패턴(Optimization Patterns) 보충자료 개발 이야기

17장. 데이터 지역성

NuRi's Tools - iframe 변환기


8. 캐시 무효화가 계속 반복되는 현상을 캐시 뒤엎기(cache thrash)라고 한다. - 류광님이 GPG7에서 사용한 표현을 가져왔다.
한편 어떤 프로세서가 다른 프로세서의 캐시에 있는 데이터를 조작할 경우, 그 프로세서는 캐시를 비우거나 갱신해야 하며 프로세서가 캐시를 동기화시킬 때 캐시 무효화(invalidation)는 일어나며 이런 계속적인 캐시 무효화는  cache trashing 이라고 하며 시스템의 성능을 저하시킨다. 출처: 리눅스 커널 심층 분석 2판. p 207

10. 코드는 game-programming-patterns/code/structure-of-arrays/component_update 에서 확인할 수 있다. 내 컴퓨터에서는 성능 차이가 최대 20배 정도 났다.

11. 이미 리처드 파비앙(Richard Fabian)이 『Data-Oriented Design』이라는 책 한 권을 썼다. 에서 내용을 확인할 수 있다.

12. 캐시 일관성 프로토콜(coherence protocol)에 대해서는 『프로그래머가 몰랐던 멀티코어 CPU 이야기』(한빛미디어, 2010) Story 12에서 자세히 설명하고 있다.

직접 써 보진 않았다.

25. 많은 사람들이 캐시를 활용할 수 있도록 게임 코드를 디자인하게 만든 Noel Llopis의 블로그 글인 Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP)에서는 이런 걸 '데이터 중심 디자인(data-oriented design)'이라고 부른다. 김학규님이 이 글을 '데이터 중심 디자인 (혹은 OOP의 위험성)'이란 제목으로 번역해 웹에 올려놓았다.(원래는 김학규님 홈페이지에 있던 글인데 원본 링크가 깨져있어서 내 블로그에 불펌해 놓았다.)
Noel Llopis는 게임개발자로 unittest++ 라는 C++용 단위 테스트 프레임워크를 만들었다.

28. 항상 그렇듯이 예외는 있다. 보통 C++ 컴파일러에서는 가상 메서드를 호출하기 위해 한 단계를 거쳐야 한다. 하지만 컴파일러가 호출하려는 객체의 정확한 자료형을 알고 있다면 탈가상화(devirtualization)을 통해 정적으로 원하는 메서드를 바로 호출할 수 있다. 탈가상화는 자바나 자바스크립트 같은 JIT(just-in-time) 컴파일러에서 더 일반적이다.
GCC 5 Release Series에 따르면 GCC 5에서는 speculative devirtualization이나 dynamic type detection 같은 기법으로 탈가상화를 지원한다고 한다.

Artemis 게임 엔진 : Artemis is a high performance Entity System framework for games, originally written in Java by Arni Arent and Tiago Costa, now ported to C#.

18장. 더티 플래그

8. Full GC를 할 때 생기는 'GC 멈춤'을 'stop-the-world' 또는 'STW'라고 부르기도 한다.

9. "컴퓨터 과학에서 어려운 것은 캐시 무효화와 이름 정하기, 이렇게 딱 두 개밖에 없다."(There are only two hard things in Computer Science: cache invalidation and naming things) - 필 칼턴(Phil Karlton)
필 칼턴은 넷스케이프 아키텍처였다고 한다. In Memory of Phil and Jan Karlton

14. HCI(Human-computer interaction)에서는 프로그램이 사용자 입력을 받았을 때 일부러 약간 기다렸다가 응답하는 것을 이력현상(hysteresis)이라고 한다. Hysteresis. The beauty of "lag" effect 참고

19장. 객체 풀

3. 윈도우즈에서 16kb 이하 메모리를 많이 할당한다면 직접 만든 메모리 풀보다 LFH(low-fragmentation heap)를 썼을 때 더 효과가 좋은 경우가 많다고 하니 참고하자. 

6. ‘죽은 쇠고기’를 뜻하는 dead beef와 철자가 같다. 이런 프로그래머들의 말장난을 hexspeak라고 한다.

빈칸 목록 - 위키백과 : 빈칸 목록(free list)은 동적 메모리 할당을 위해서 계획적으로 사용된 데이터 구조이다. 빈칸 목록은 메모리의 할당되지 않은 영역들을 연결 리스트로 연결시켜서 운용한다. 모든 오브젝트들이 동일한 크기를 가지고 있다면, 빈칸 목록이 메모리 풀로부터 메모리를 할당하는데 가장 적합하다.

20장. 공간분할(Spatial Partition)

2. 비둘기집 정렬(pigeonhole sort) 같은 기법을 사용하면 O(n)으로 줄일 수 있다.



덧글

댓글 입력 영역


Yes24위대한게임의탄생3

위대한 게임의 탄생 3
예스24 | 애드온2