병렬 프로그래밍과 DOD

15
병병 병병병병병 ( GPG.8 TBB 병 병병병 병병 병병병 병병병 병병 병병병병 & 병병병 병병 병병병 ) CSO 병병병병병 병병 병병병

description

 

Transcript of 병렬 프로그래밍과 DOD

Page 1: 병렬 프로그래밍과 DOD

병렬 프로그래밍( GPG.8 TBB 를 이용한 다중 스레드 행위자 기반 아키텍쳐 &

데이터 중심 디자인 )

CSO 클라이언트 파트박기헌

Page 2: 병렬 프로그래밍과 DOD

멀티 코어의 활용 동시성 찾기 과제의 분해 자료 지향 설계

Page 3: 병렬 프로그래밍과 DOD

게임에서의 동시성 찾기 그래픽 시스템과 물리 시스템은 자료 주도적

( Data-Driven ) 게임 플레이 시스템은 사건 주도적 ( Event-

Driven )

Page 4: 병렬 프로그래밍과 DOD

행위자 기반 프로그래밍( Actor-Based Programming )

프로그래밍 및 처리의 기본 단위가 행위자(Actor) 인 프로그래밍 패러다임

객체 (Object) 와 비슷하나 스스로 정보를 처리하는 능력으로 객체와 구분 됨

메서드 호출이 아닌 메시지 전달을 통해 소통 및 상호 작용

Page 5: 병렬 프로그래밍과 DOD

행위자 클래스 구성 내부 상태 메시지 대기열 메시지 처리 메시지 소비

Page 6: 병렬 프로그래밍과 DOD

메시지 메시지 대기열 성능이 행위자의 전반적인 성능

영향 미침 . 메시지 대기열에 사용할 컨테이너로 GPG08

에서는 tbb::concurrent_queue 를 사용 tbb::concurrent_queue 는 스레드에 안전한

다중 생산자 다중 소비 대기열 (MPMC) 하지만 Actor 의 기능은 MPSC 이기 때문에

tbb::concurrent_queue 는 오버 스펙

Page 7: 병렬 프로그래밍과 DOD

메시지 전달시 고려 사항 다른 행위자의 상태를 조회해야 하는 경우

비동기이기 때문에 조회가 까다로울 수 있다 . 약속 기법을 사용해 수신자가 전달자에게 상태를

알려주도록 한다 . 순차적인 메시지 처리

열쇠 넣기 -> 문 열기 메시지가 순서대로 도착할 보장이 없음 .

순차 행위자를 통해 메시지 순서를 보장 . 또는 타임 스탬프를 이용해 먼저 온 메시지를 처리

Page 8: 병렬 프로그래밍과 DOD

자료 주도적 디자인Data – Oriented Design

Page 9: 병렬 프로그래밍과 DOD

객체 지향적 씬 그래프( OOP - Scene Graph)

Page 10: 병렬 프로그래밍과 DOD

데이터 중심 씬 그래프( DOD - Scene Graph)

Page 11: 병렬 프로그래밍과 DOD

DOD 코드 예제

iCache - 600

m_postion - 600

m_mod - 600

~20 Cyh-cles

m_aimDir - 100

iCache - 600

m_postion - 600

m_mod - 600

~20 Cyh-cles

m_aimDir - 100

iCache - 600

m_postion - 600

m_mod - 600

~20 Cyh-cles

m_aimDir - 100

iCache - 600

m_postion - 600

m_mod - 600

~20 Cyh-cles

m_aimDir - 100

어느 클래스의 멤버 함수를 4 번 호출

7680ms 가 소요 됨

Page 12: 병렬 프로그래밍과 DOD

DOD 코드 예제

읽기 전용 입력 값 선형 배열 쓰기 한번에 모든 데이터 순회

실제 계산식은 변하지 않음

Page 13: 병렬 프로그래밍과 DOD

DOD 코드 예제

iCache - 600

positions - 600

mod - 600 Cycle ~20 airDir - 100

Cycle ~20

Cycle ~20

Cycle ~20

1980ms 가 소요 됨

Page 14: 병렬 프로그래밍과 DOD

DOD 의 장점 병렬화 캐쉬 친화적 최적화 모듈화

Page 15: 병렬 프로그래밍과 DOD

참고 Game Programming Gems 8 MultiProcessor Game Loop : Uncharted

2 Introduction to Data-Oriented Design :

Dice