SlideShare a Scribd company logo
1 of 15
병렬 프로그래밍
( GPG.8 TBB를 이용한 다중 스레드 행위자 기반 아키텍쳐
& 데이터 중심 디자인 )
CSO 클라이언트 파트
박기헌
멀티 코어의 활용
 동시성 찾기
 과제의 분해
 자료 지향 설계
게임에서의 동시성 찾기
 그래픽 시스템과 물리 시스템은 자료 주도적
( Data-Driven )
 게임 플레이 시스템은 사건 주도적 ( Event-
Driven )
행위자 기반 프로그래밍
( Actor-Based Programming )
 프로그래밍 및 처리의 기본 단위가 행위자
(Actor)인 프로그래밍 패러다임
 객체(Object)와 비슷하나 스스로 정보를 처
리하는 능력으로 객체와 구분 됨
 메서드 호출이 아닌 메시지 전달을 통해 소
통 및 상호 작용
행위자 클래스 구성
 내부 상태
 메시지 대기열
 메시지 처리
 메시지 소비
메시지
 메시지 대기열 성능이 행위자의 전반적인 성
능 영향 미침.
 메시지 대기열에 사용할 컨테이너로 GPG08
에서는 tbb::concurrent_queue를 사용
 tbb::concurrent_queue는 스레드에 안전한
다중 생산자 다중 소비 대기열 (MPMC)
 하지만 Actor의 기능은 MPSC 이기 때문에
tbb::concurrent_queue는 오버 스펙
메시지 전달시 고려 사항
 다른 행위자의 상태를 조회해야 하는 경우
 비동기이기 때문에 조회가 까다로울 수 있다.
 약속 기법을 사용해 수신자가 전달자에게 상태를 알
려주도록 한다.
 순차적인 메시지 처리
 열쇠 넣기 -> 문 열기 메시지가 순서대로 도착할 보
장이 없음.
 순차 행위자를 통해 메시지 순서를 보장.
 또는 타임 스탬프를 이용해 먼저 온 메시지를 처리
자료 주도적 디자인
Data – Oriented Design
객체 지향적 씬 그래프
( OOP - Scene Graph)
데이터 중심 씬 그래프
( DOD - Scene Graph)
DOD 코드 예제
iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100
iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100
iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100
iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100
 어느 클래스의 멤버 함수를 4번 호출
7680ms가 소요 됨
DOD 코드 예제
읽기 전용 입력 값 선형 배열 쓰기 한번에 모든 데이터 순회
실제 계산식은 변하지 않음
DOD 코드 예제
iCache - 600 positions - 600 mod - 600 Cycle ~20 airDir - 100
Cycle ~20
Cycle ~20
Cycle ~20
1980ms가 소요 됨
DOD의 장점
 병렬화
 캐쉬 친화적
 최적화
 모듈화
참고
 Game Programming Gems 8
 MultiProcessor Game Loop : Uncharted 2
 Introduction to Data-Oriented Design :
Dice

More Related Content

Viewers also liked

[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍
KyeongWon Koo
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
Kiheon Park
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
Yong Joon Moon
 

Viewers also liked (19)

Java와 Python의 만남: Jython과 Sikuli
Java와 Python의 만남: Jython과 SikuliJava와 Python의 만남: Jython과 Sikuli
Java와 Python의 만남: Jython과 Sikuli
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
 
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
PyCon 12월 세미나 - 실전 파이썬 프로그래밍 책 홍보
 
Python Recipes for django girls seoul
Python Recipes for django girls seoulPython Recipes for django girls seoul
Python Recipes for django girls seoul
 
Python 생태계의 이해
Python 생태계의 이해Python 생태계의 이해
Python 생태계의 이해
 
Python on Android
Python on AndroidPython on Android
Python on Android
 
파이썬 병렬프로그래밍
파이썬 병렬프로그래밍파이썬 병렬프로그래밍
파이썬 병렬프로그래밍
 
Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석Python 활용: 이미지 처리와 데이터 분석
Python 활용: 이미지 처리와 데이터 분석
 
[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
 
파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기파이썬 반복자 생성자 이해하기
파이썬 반복자 생성자 이해하기
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
Python 이해하기 20160815
Python 이해하기 20160815Python 이해하기 20160815
Python 이해하기 20160815
 
Python 표준 라이브러리
Python 표준 라이브러리Python 표준 라이브러리
Python 표준 라이브러리
 
Python 웹 프로그래밍
Python 웹 프로그래밍Python 웹 프로그래밍
Python 웹 프로그래밍
 

Recently uploaded

파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
Wonjun Hwang
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
Wonjun Hwang
 

Recently uploaded (6)

[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
[OpenLAB] AWS reInvent를 통해 바라본 글로벌 Cloud 기술동향.pdf
 
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
오픈소스 위험 관리 및 공급망 보안 솔루션 'Checkmarx SCA' 소개자료
 
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
도심 하늘에서 시속 200km로 비행할 수 있는 미래 항공 모빌리티 'S-A2'
 
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
클라우드 애플리케이션 보안 플랫폼 'Checkmarx One' 소개자료
 
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
파일 업로드(Kitworks Team Study 유현주 발표자료 240510)
 
Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)Grid Layout (Kitworks Team Study 장현정 발표자료)
Grid Layout (Kitworks Team Study 장현정 발표자료)
 

병렬 프로그래밍과 DOD

  • 1. 병렬 프로그래밍 ( GPG.8 TBB를 이용한 다중 스레드 행위자 기반 아키텍쳐 & 데이터 중심 디자인 ) CSO 클라이언트 파트 박기헌
  • 2. 멀티 코어의 활용  동시성 찾기  과제의 분해  자료 지향 설계
  • 3. 게임에서의 동시성 찾기  그래픽 시스템과 물리 시스템은 자료 주도적 ( Data-Driven )  게임 플레이 시스템은 사건 주도적 ( Event- Driven )
  • 4. 행위자 기반 프로그래밍 ( Actor-Based Programming )  프로그래밍 및 처리의 기본 단위가 행위자 (Actor)인 프로그래밍 패러다임  객체(Object)와 비슷하나 스스로 정보를 처 리하는 능력으로 객체와 구분 됨  메서드 호출이 아닌 메시지 전달을 통해 소 통 및 상호 작용
  • 5. 행위자 클래스 구성  내부 상태  메시지 대기열  메시지 처리  메시지 소비
  • 6. 메시지  메시지 대기열 성능이 행위자의 전반적인 성 능 영향 미침.  메시지 대기열에 사용할 컨테이너로 GPG08 에서는 tbb::concurrent_queue를 사용  tbb::concurrent_queue는 스레드에 안전한 다중 생산자 다중 소비 대기열 (MPMC)  하지만 Actor의 기능은 MPSC 이기 때문에 tbb::concurrent_queue는 오버 스펙
  • 7. 메시지 전달시 고려 사항  다른 행위자의 상태를 조회해야 하는 경우  비동기이기 때문에 조회가 까다로울 수 있다.  약속 기법을 사용해 수신자가 전달자에게 상태를 알 려주도록 한다.  순차적인 메시지 처리  열쇠 넣기 -> 문 열기 메시지가 순서대로 도착할 보 장이 없음.  순차 행위자를 통해 메시지 순서를 보장.  또는 타임 스탬프를 이용해 먼저 온 메시지를 처리
  • 8. 자료 주도적 디자인 Data – Oriented Design
  • 9. 객체 지향적 씬 그래프 ( OOP - Scene Graph)
  • 10. 데이터 중심 씬 그래프 ( DOD - Scene Graph)
  • 11. DOD 코드 예제 iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100 iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100 iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100 iCache - 600 m_postion - 600 m_mod - 600 ~20 Cyhcles m_aimDir - 100  어느 클래스의 멤버 함수를 4번 호출 7680ms가 소요 됨
  • 12. DOD 코드 예제 읽기 전용 입력 값 선형 배열 쓰기 한번에 모든 데이터 순회 실제 계산식은 변하지 않음
  • 13. DOD 코드 예제 iCache - 600 positions - 600 mod - 600 Cycle ~20 airDir - 100 Cycle ~20 Cycle ~20 Cycle ~20 1980ms가 소요 됨
  • 14. DOD의 장점  병렬화  캐쉬 친화적  최적화  모듈화
  • 15. 참고  Game Programming Gems 8  MultiProcessor Game Loop : Uncharted 2  Introduction to Data-Oriented Design : Dice

Editor's Notes

  1. 메시지 처리 방식은 상황과 환경에 맞게 잘 구현~
  2. 좀더 작은 단위까지 DOD로 최적화 하여 성능을 향상 시킬 수 있다.