data oriented design

21
Data Oriented Design

Upload: sangwook-kwon

Post on 27-Jun-2015

1.086 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Data oriented design

Data Oriented Design

Page 2: Data oriented design
Page 3: Data oriented design

원인은 ?• Random memory access pattern• Cache miss

그럼 어떻게 하지 ?

병렬화를 하여 성능을 끌어올리자 !

Page 4: Data oriented design

그러나 ....

병렬화를 해도 엄청난 노력이 필요하다 .성능향상도 동기화 부분에서 많이 까먹게 된다 .코드도 복잡해진다 !버그도 생겨난다 !!!더 이상 건드리기가 싫어진다 ㅠㅠ

Page 5: Data oriented design

왜 이런일이 반복 발생하지 ?• 개발능력이 딸려서 ?• 개발 툴 때문에 ?• 프로그래밍 언어가 문제인가 ?• 경험이 부족해서인가 ?

Page 6: Data oriented design

왜 이런일이 반복 발생하지 ?• 개발능력이 딸려서 ?• 개발 툴 때문에 ?• 프로그래밍 언어가 문제인가 ?• 경험이 부족해서인가 ?

프로그래머의 오래된 관습 ,OOP가 문제일 수도 있다 !!

Page 7: Data oriented design

너무나도 개발자들 사이에서 깊숙히 뿌리 내린 OOP.도저히 오브젝트를 빼 놓는다는 것은 생각조차 힘들다 .OOP 를 안쓴다고 쳐도 대안은 있는가 ?

Page 8: Data oriented design

너무나도 개발자들 사이에서 깊숙히 뿌리 내린 OOP.도저히 오브젝트를 빼 놓는다는 것은 생각조차 힘들다 .OOP 를 안쓴다고 쳐도 대안은 있는가 ?

DOD(Data Oriented Design) 은 이러한 어려운 문제를 해결 할 수 있는 다른 방식의 접근이다 .

DOD 는 DDD(Data Driven Design) 과 다르다 .데이터 주도형 디자인은 게임의 기능을 최대한코드 밖으로 빼내서 데이터쪽으로 옮기는 것을의미한다 . 

Page 9: Data oriented design

이상적인 데이터

데이터 관점에서의 이상적인 데이터 ? 그게 뭐야 ?

Page 10: Data oriented design

최소한의 노력으로 처리 될 수 있는 데이터가이상적인 데이터 !

1. 데이터 형태는 연속적이면서• 그리고 같은 구조로 짜여진 데이터가 • 큰 블럭으로 짜여져서 순차적으로 처리하게 되어 있는 경우

어떤 경우에건 목표는 변환의 양을 줄이고 ,가능하다면 데이터를 빌드 괒어에서 선처리 해서 내놓는 것이좋다 .

Page 11: Data oriented design

오브젝트를 생각하게 되면 , 여러가지 형태의 트리들이 떠오른다 . 상속트리 , 트리식 포함관계 , 메시지 전달 트리구조 ,그리고 자연스럽게 데이터는 트리형태로 정렬된다 .

그 결과 어떤 오브젝트에 대한 연산을 수행하게 되면 , 트리상에 엮인 다른 오브젝트를 액세스 하게 된다 . 한 묶음의오브젝트를 처리하다보면 트리구조를 따라 각각의 오브젝트에 대해 서로 다른 연산을 수행하게 된다 .

Page 12: Data oriented design

가장 최선의 데이터 형태는 ?1. 오브젝트 하나하나 컴포넌트 별로 쪼갠다 .• 같은 컴포넌트끼리 그룹을 지어서 메모리

상에 합쳐지게 해놓는다 .(그 컴포넌트가 어느 오브젝트에 속해 있는지와는 무관하다 !!)

• 이런 식으로 데이터를 같은 종류까리 연속적으로 배치하게 되면 순차적 대량 처리가 가능해진다 .

Page 13: Data oriented design

DOD 가 왜 강력한데 ?

게임에서는 하나의 오브젝트가 아닌 다수의 오브젝트가있으며 OOP 에서는 오브젝트 위주로 처리를 하는 반면 ,DOD 는 하드웨어의 특성을 살려서 데이터를 같은 타입끼리복수개를 묶게 된다 .

Page 14: Data oriented design

DOD 의 장점

1. 병렬화 (Parallelization)OOP 코드의 병렬화는 어렵고 , 실수하기 쉽고 , 효율이 오르지 않을 수도 있다 .

여러개의 스레드에서 데이터에 접근할 때 생기는Race Condition 을 막기 위해 동기화를 여기저기 붙이다 보면스레드들은 락을 기다리느라 대기하는 시간이 길어지며성능이 떨어진다 .

DOD 는 병렬화는 간단해지며 , 입력데이터와 그것을 처리할 작은 함수들 , 출력데이터를 갖게된다 . 이런 작업은 여러개의 스레드에 쉽게 나눌 수 있으며 동기화도 별로 필요하지 않다 . 이 방식은 병렬 프로세서에서 실행시키는 것도 어렵지 안다 .

Page 15: Data oriented design

DOD 의 장점

2. 캐쉬 활용 ( Cache Utilization)최신 다단계 캐쉬로 설계된 하드웨어의 성능을 최대한 끌어올리는 핵심은 캐쉬 친화적인 메모리 액세스다 .

OOP 에서는 최적화를 하는데 있어 알고리즘을 바꾸거나 , C코드를 어셈블리어로 바꾸거나 함수호출의 순서를 바꾸는 정도인데 , DOD 에서는 Cache miss 를 방지하면서 더 빠른 처리가 가능하도록 한다 .

Page 16: Data oriented design

DOD 의 장점

3. 모듈화 (Modularity)DOD 는 성능에도 도움이 되지만 , 개발의 편이에도 도움이 된다 . 코드를 데이터 변환이라는 관점에서 작성하게 되면 , 결국 , 서로 의존성이 많지 않은 작은 함수들로 만들게 되고 , 결국 코드들은 평평하고 (flat) 의존성이 별로 없는 함수들의 모음이 된다 . 이런 모듈화는 이해하기 쉽고 , 바꾸거나 고치기 쉬운 코드들이 된다 .

Page 17: Data oriented design

DOD 의 장점

4. 테스트 (Testing)오브젝트의 상호작용에 대한 유짓 테스트를 만드는 것은 쉽지않은 일이다 . 모의 객체를 세팅하고 간접적인 방법들을 써야한다 . 너무 고생스럽다 .

반면 데이터를 직접 다루게 되면 유닛 테스트를 짜는 것은 간단해진다 . TDD 를 하는 중이건 , 개발이 끝난 후에 테스트를 만드는 것이건 코드가 아주 테스트하기 편해진다 .

Page 18: Data oriented design

그러나 단점도 있다 !!

여태까지 좋다면서 뭐가 문제야 !!

Page 19: Data oriented design

문제점은 ...

지금까지 해오던 설계방법에 비해 너무 생소한다 .적응하기까지 시간이 걸릴 수도 있다 .

프로그램 짜는 방식을 전환하기 때문에 상당한 연습이필요하다 .

Page 20: Data oriented design

그럼 OOP 는 필요 없나 ??

OOP 는 중요하다 . OOP 의 개념을 완전히 버릴 수는 없고 ,다만 우리가 노력해야 할 부분은 대용량의 데이터를 처리할때 , DOD 관점에서 생각해보고 어떻게 적용해야하나 이다 .

이것이 현재 개발자들이 고민하고 풀어야할 숙제이다 .

Page 21: Data oriented design

Fin.