SlideShare a Scribd company logo
1 of 21
Component-based Entity System and
Data-oriented Design
2016-11-12 발표자 이석우
Component
Entity System
OOP는 왜 느린가? Data-orented
Design
결론
01 02 03 04
MAIN TITLE
Component-based Entity System
• 게임 개발 분야에서 주로 사용되는 아키텍쳐 패턴
• Component들을 조합하여 Entity를 정의
• 여기서 잠깐!!
 Entity와 Component는 무엇인가요?
Entity란 무엇인가?
• 컴포넌트를 담을 수 있는 컨테이너
GameObject
AI Physics Rendering
Entity
Component
Entity란 무엇인가?
Entity의 계층구조
Entity
MonsterHuman
Troll Goblin Orc
계층구조
Entity의 계층구조
Orc
치프턴 전사 탈론
Monster
록타오가
르!
록타오가
르!
록타오가
르!
록타오가
르!
일반적인 CES in OOP
• 코드 예제
• https://github.com/sukwoo22/DataOrientedDesign
일반적인 CES in OOP
엔티티
배열
AI
엔티티
엔티티
엔티티
엔티티
물리
렌더링
AI렌더링
물리
물리
물리
AI
AI
렌더링
렌더링
OOP is Good?
• 재사용하기 좋다
• 확장성이 좋다
• 유지 보수가 용이하다
• 그러나….. 성능이 너무 느리다
OOP는 느린 것인가?
CPU/Memory Performance
OOP는 느린 것인가?
CPU Die
CPU
L1
Cache
L2
Cache
fast slower Main RAMslowest
d
a
t
a
Cache Line
캐스 미스가 발생되는 이유는?
엔티티
배열
엔티티
엔티티
엔티티
엔티티
여기서 알 수 있는 사실
• 기존의 OOP로 구성된 시스템은 현대 하드웨어에
적합한 시스템이 아니다!!!
• 그럼 어떻게 하죠?
• Data-oriented Design !!! -> 캐쉬를 최대한 이용하자!
Data-Oriented Design
• 하드웨어 친화적인 디자인 패턴 -> 캐시 미스를
최소화 하자!
• DoD = DDD (Data-driven Design) ? NO!
• OOP, DDD, 절차형 and 함수 프로그래밍 어디든
적용가능하다!
어떻게 구현해야 할까?
• Component 별로 하나의 배열로 묶자!!
AI AI AI AI
물리 물리 물리 물리
렌더링 렌더링 렌더링 렌더링
이걸로 끝?
• 당신은 더티 플래그를 사용하는가?
 코드 예제
• 더티 플래그의 문제점
 CPU의 분기 예측 실패 -> 파이프라인의 지연
• 해결책(코드 예제)
• https://github.com/sukwoo22/DataOrientedDesign
더 최적화할 방법은 없을까?
• 컴포넌트가 크다면 캐스 미스가 발생할 확률이
높다
• 빈번하게 사용되는 데이터와 한산한 데이터로
나누자!!!
 (코드 예제)
 https://github.com/sukwoo22/DataOrientedDesign
결론
• 기존의 OOP는 현대 하드웨어에 친화적이지 않다.
• 하지만 OOP 장점은 버리기 아깝다!
• 따라서 OOP와 DoD를 함께 이용하자!!
 컴포넌트 별로 배열로 묶는다.
 더티 플래그 사용을 자제한다
 바쁜 코드와 한산한 코드를 분리한다.
참조
• 게임 프로그래밍 패턴 – 컴포넌트, 데이터 지역성
 저자 로버트 나이스트롬, 번역 박일
• Pitfalls of Object Oriented Programming
 발표 Tony Albech – Sony Technical Consultant
• Component Based Engine Design
 Randy Gaul – 블로거
• Entity-systems.wikidot.com
 Entity Systems Wiki
contents 1 / contents 2 / contents 3 / contents 4
Q&A
감사합니다!

More Related Content

What's hot

Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Taejun Kim
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발Jeongkyu Shin
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013영욱 오
 
[243]kaleido 노현걸
[243]kaleido 노현걸[243]kaleido 노현걸
[243]kaleido 노현걸NAVER D2
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발주항 박
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민NAVER D2
 
딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetectJunyi Song
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기Wonha Ryu
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 정주 김
 
Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱NAVER D2
 
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례Taejun Kim
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템NAVER D2
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
 
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드강 민우
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 

What's hot (20)

Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
머신러닝 및 데이터 과학 연구자를 위한 python 기반 컨테이너 분산처리 플랫폼 설계 및 개발
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
 
[243]kaleido 노현걸
[243]kaleido 노현걸[243]kaleido 노현걸
[243]kaleido 노현걸
 
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
오픈 소스를 활용한 캐쥬얼 게임 서버 프레임워크 개발
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민
 
딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect딥러닝(Deep Learing) using DeepDetect
딥러닝(Deep Learing) using DeepDetect
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
NDC 2016, [슈판워] 맨땅에서 데이터 분석 시스템 만들어나가기
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출 NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
NDC 2016 김정주 - 기계학습을 활용한 게임어뷰징 검출
 
Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱Elasticsearch Modeling - 정호욱
Elasticsearch Modeling - 정호욱
 
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
Zeppelin(제플린) 서울시립대학교 데이터 마이닝연구실 활용사례
 
인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템인공지능추천시스템 airs개발기_모델링과시스템
인공지능추천시스템 airs개발기_모델링과시스템
 
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...
 
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
[IGC 2016] 유니티코리아 오지현 - “뭣이 중헌디? 성능 프로파일링도 모름서”: 유니티 성능 프로파일링 가이드
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 

Similar to Component-Based Entity System과 Data-oriented Design

06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성noerror
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)명석 고
 
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
Ndc2010   김주복, v3. 마비노기2아키텍처리뷰Ndc2010   김주복, v3. 마비노기2아키텍처리뷰
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰Jubok Kim
 
인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬Seung-June Lee
 
NDC17 장창완(최종)
NDC17 장창완(최종)NDC17 장창완(최종)
NDC17 장창완(최종)창완 장
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄현 수
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Suhyeon Jo
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용Susang Kim
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 YoChun YoChun
 
회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것성환 조
 
(독서광) 안드로이드 뜻밖의 역사
(독서광) 안드로이드 뜻밖의 역사(독서광) 안드로이드 뜻밖의 역사
(독서광) 안드로이드 뜻밖의 역사Jay Park
 
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영ZIGZAG
 
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서영준 박
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들Yu Yongwoo
 
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템Hoyeon Kim
 
소프트웨어공학 프로젝트 최종발표.pptx
소프트웨어공학 프로젝트 최종발표.pptx소프트웨어공학 프로젝트 최종발표.pptx
소프트웨어공학 프로젝트 최종발표.pptxGwangho Kim
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기KTH, 케이티하이텔
 

Similar to Component-Based Entity System과 Data-oriented Design (20)

06_게임엔진구성
06_게임엔진구성06_게임엔진구성
06_게임엔진구성
 
DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)DDD 그게 뭔데 (개념 찍먹편)
DDD 그게 뭔데 (개념 찍먹편)
 
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
Ndc2010   김주복, v3. 마비노기2아키텍처리뷰Ndc2010   김주복, v3. 마비노기2아키텍처리뷰
Ndc2010 김주복, v3. 마비노기2아키텍처리뷰
 
인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬인생은 짧아요, 엑셀 대신 파이썬
인생은 짧아요, 엑셀 대신 파이썬
 
NDC17 장창완(최종)
NDC17 장창완(최종)NDC17 장창완(최종)
NDC17 장창완(최종)
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
 
Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄Domain-Driven-Design 정복기 1탄
Domain-Driven-Design 정복기 1탄
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
 
OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료 OSS개발자포럼(2017.01) 파이썬 소개자료
OSS개발자포럼(2017.01) 파이썬 소개자료
 
회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것
 
(독서광) 안드로이드 뜻밖의 역사
(독서광) 안드로이드 뜻밖의 역사(독서광) 안드로이드 뜻밖의 역사
(독서광) 안드로이드 뜻밖의 역사
 
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
WTM2018 그것이 알고싶다 어쩌다 10년... 지그재그 손연미, 백서영
 
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서
NDC 2014 Beyond Code: <야생의 땅:듀랑고>의 좌충우돌 개발 과정 - 프로그래머가 챙겨주는 또 다른 개발자 사용 설명서
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들개발자가 되기전 누군가 알려주면 좋았을 모든 것들
개발자가 되기전 누군가 알려주면 좋았을 모든 것들
 
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
 
소프트웨어공학 프로젝트 최종발표.pptx
소프트웨어공학 프로젝트 최종발표.pptx소프트웨어공학 프로젝트 최종발표.pptx
소프트웨어공학 프로젝트 최종발표.pptx
 
[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기[H3 2012] 오픈소스로 개발 실력 쌓기
[H3 2012] 오픈소스로 개발 실력 쌓기
 

More from Sukwoo Lee

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow MappingSukwoo Lee
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우Sukwoo Lee
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑Sukwoo Lee
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링Sukwoo Lee
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -Sukwoo Lee
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 

More from Sukwoo Lee (9)

진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
Cascade Shadow Mapping
Cascade Shadow MappingCascade Shadow Mapping
Cascade Shadow Mapping
 
행동 트리
행동 트리행동 트리
행동 트리
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
포인트 셰도우
포인트 셰도우포인트 셰도우
포인트 셰도우
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링
 
리얼타임 렌더링 - 조명 입문편 -
리얼타임 렌더링 - 조명  입문편 -리얼타임 렌더링 - 조명  입문편 -
리얼타임 렌더링 - 조명 입문편 -
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 

Recently uploaded

공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 

Recently uploaded (8)

공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 

Component-Based Entity System과 Data-oriented Design

  • 1. Component-based Entity System and Data-oriented Design 2016-11-12 발표자 이석우
  • 2. Component Entity System OOP는 왜 느린가? Data-orented Design 결론 01 02 03 04 MAIN TITLE
  • 3. Component-based Entity System • 게임 개발 분야에서 주로 사용되는 아키텍쳐 패턴 • Component들을 조합하여 Entity를 정의 • 여기서 잠깐!!  Entity와 Component는 무엇인가요?
  • 4. Entity란 무엇인가? • 컴포넌트를 담을 수 있는 컨테이너 GameObject AI Physics Rendering Entity Component
  • 7. Entity의 계층구조 Orc 치프턴 전사 탈론 Monster 록타오가 르! 록타오가 르! 록타오가 르! 록타오가 르!
  • 8. 일반적인 CES in OOP • 코드 예제 • https://github.com/sukwoo22/DataOrientedDesign
  • 9. 일반적인 CES in OOP 엔티티 배열 AI 엔티티 엔티티 엔티티 엔티티 물리 렌더링 AI렌더링 물리 물리 물리 AI AI 렌더링 렌더링
  • 10. OOP is Good? • 재사용하기 좋다 • 확장성이 좋다 • 유지 보수가 용이하다 • 그러나….. 성능이 너무 느리다
  • 12. OOP는 느린 것인가? CPU Die CPU L1 Cache L2 Cache fast slower Main RAMslowest d a t a Cache Line
  • 13. 캐스 미스가 발생되는 이유는? 엔티티 배열 엔티티 엔티티 엔티티 엔티티
  • 14. 여기서 알 수 있는 사실 • 기존의 OOP로 구성된 시스템은 현대 하드웨어에 적합한 시스템이 아니다!!! • 그럼 어떻게 하죠? • Data-oriented Design !!! -> 캐쉬를 최대한 이용하자!
  • 15. Data-Oriented Design • 하드웨어 친화적인 디자인 패턴 -> 캐시 미스를 최소화 하자! • DoD = DDD (Data-driven Design) ? NO! • OOP, DDD, 절차형 and 함수 프로그래밍 어디든 적용가능하다!
  • 16. 어떻게 구현해야 할까? • Component 별로 하나의 배열로 묶자!! AI AI AI AI 물리 물리 물리 물리 렌더링 렌더링 렌더링 렌더링
  • 17. 이걸로 끝? • 당신은 더티 플래그를 사용하는가?  코드 예제 • 더티 플래그의 문제점  CPU의 분기 예측 실패 -> 파이프라인의 지연 • 해결책(코드 예제) • https://github.com/sukwoo22/DataOrientedDesign
  • 18. 더 최적화할 방법은 없을까? • 컴포넌트가 크다면 캐스 미스가 발생할 확률이 높다 • 빈번하게 사용되는 데이터와 한산한 데이터로 나누자!!!  (코드 예제)  https://github.com/sukwoo22/DataOrientedDesign
  • 19. 결론 • 기존의 OOP는 현대 하드웨어에 친화적이지 않다. • 하지만 OOP 장점은 버리기 아깝다! • 따라서 OOP와 DoD를 함께 이용하자!!  컴포넌트 별로 배열로 묶는다.  더티 플래그 사용을 자제한다  바쁜 코드와 한산한 코드를 분리한다.
  • 20. 참조 • 게임 프로그래밍 패턴 – 컴포넌트, 데이터 지역성  저자 로버트 나이스트롬, 번역 박일 • Pitfalls of Object Oriented Programming  발표 Tony Albech – Sony Technical Consultant • Component Based Engine Design  Randy Gaul – 블로거 • Entity-systems.wikidot.com  Entity Systems Wiki
  • 21. contents 1 / contents 2 / contents 3 / contents 4 Q&A 감사합니다!

Editor's Notes

  1. Component/Entity 시스템은 게임 개발 분야에서 주로 사용되는 아키텍쳐 패턴이다. CES는 상속의 원리를 이용하여 엔티티를 정의하고 해당 개체의 특성에 맞게 컴포넌트들을 조합할 수 있는 유연하고 효율적인 시스템을 말합니다. 여기서 Entity와 Component는 무엇일까요?
  2. 컴포넌트는 엔티티에 필요한 기능들을 독립적으로 정의한 객체입니다. 예를 들어, 게임 속에서 활동하는 몬스터에겐 인공지능과 물리적인 특성 그리고 화면에 보여주기 위한 렌더링이 필요하지요. 엔티티는 컴포넌트를 담는 하나의 컨테이너입니다. 이 컴포넌트의 조합을 통해서 프로그램 내에서 특수한 역할을 가진 객체로서 존재합니다.
  3. 감이 오시나요? 예를 한번 들어보겠습니다. 게임 속 캐릭터, 특정 조건을 만족시켜야 발생되는 이벤트, 던전 곳곳에 도사리는 트랩, 록맨의 E캔과 같은 아이템 등 모두 엔티티가 될 수 있습니다.
  4. 실제 게임에서는 다양하고 세부적인 기능을 가진 엔티티가 필요로 하기 때문에, 엔티티는 계층구조를 이루는 것이 특징입니다. 객체 지향 프로그래밍에서는 이를 상속을 통해서 구현합니다. 덕분에 코드의 재활용이 상당 부분 가능해지고 그 결과 소프트웨어의 생산성이 훨씬 증가하게 되죠. 자 여기서 이해를 돕기 위해 오크를 더 세부적으로 살펴보겠습니다.
  5. 예를 들어 오크 특성을 상속 받은 개체들은 기본적으로 힘이 세고 에너지가 많습니다. 이것을 각 객체 하나 하나를 일일이 정의하는 것 보다 공통된 속성을 Orc 엔티티에 묶어 놓고 이것을 상속받아 필요한 컴포넌트만 추가하는 것이 효율적이기 때문입니다.
  6. 이제 코드를 보면서 설명해 보도록할까요? 먼저 컴포넌트 클래스가 있습니다. 여기에는 반복적으로 갱신되는 업데이트 함수가 있습니다. 그리고 상속을 통하여 AI와 Physics 그리고 렌더링 컴포넌트를 정의하였습니다. 렌더링 컴포넌트는 추가적으로 렌더 함수가 있겠죠? 그리고 다음은 이 컴포넌트들을 담는 엔티티 클래스 입니다. 엔티티 클래스에서는 그 컴포넌트을 담은 배열이 있고 이곳에 삽입하고 제거하는 함수가 있습니다. 그리고 엔티티들을 관리하는 엔티티 매니져 클래스들이 있습니다. 이 매니져에 대한 배열을 메인 엔진이 가지고 있습니다. 여기서는 위의 클래스들을 순차적으로 순회하여 각 컴포넌트들에 대한 업데이트와 렌더 함수를 메인 루프에서 호출되도록 합니다. 자, 이 코드의 문제점은 뭘까요?
  7. 그림을 보면서 설명하겠습니다. 앞에서와 같이 전통적인 OOP 방식으로 코딩을 하면 힙이라 불리는 메모리 공간에서 그림과 같이 랜덤하게 엔티티와 컴포넌트들이 생성됩니다. 왜냐고요? 우리가 사용하는 new 키워드와 생성자를 이용한 객체 생성 방식은 객체들의 위치까지 정렬시켜주지 않기 때문이죠. 이것은 캐시 미스가 발생할 확률을 높이는 요인으로 프로그램 성능에 안좋은 영향을 끼칩니다.
  8. 자 정리해 볼까요?
  9. 대체 왜 이렇게 느릴까요? 그 이유는 메모리와 CPU의 성능차이에 있습니다. 1980년에는 CPU와 메모리의 성능 차이가 거의 없었습니다. 하지만 지금은 갈수록 그 차이가 현격하게 벌어지고 있죠. 이 때문에 CPU가 아무리 빠르더라도 메모리로부터 데이터를 읽어 오길 기다리느라 CPU의 실행이 멈추게 되는 병목 현상이 생기게 되죠.
  10. 메인 RAM에서 데이터를 가져다 쓰는 비용을 줄이기 위해서 오늘날의 프로세서는 캐시를 이용합니다. 캐시란 CPU 바로 옆에 붙어 있는 고성능 메모리입니다. 즉, 메인램에서 데이터를 직접 받아오면 느리지만 캐시를 이용하면 훨씬 빨라지지요. 하지만 캐시에서 데이터를 읽어오기 위해선 먼저 메인램에서 캐쉬로 메모리 조각을 이동시키는 과정이 필요합니다. 이 메모리 조각을 캐시 라인이라고 합니다. 캐시 라인은 현재 필요한 데이터 하나만이 아니라 그 데이터 주변 메모리까지 포함되죠.
  11. 캐시에 데이터가 없어서 메인 램에서 데이터를 읽어오는 경우를 바로 캐시 미스라 하는 데요. 자 다시 뒤로 돌아가서 방금 전의 코드는 왜 캐시 미스를 발생시키는 걸까요? 엔티티 차례로 읽어 온다고 과정해 봅시다. 자 먼저 1번 엔티티는 처음이니까 당연히 캐시에 없겠죠? 캐시 미스가 발생합니다. 대신 엔티티 주변 메모리 조각을 캐시로 이동시킵니다. 2번 엔티티는 캐시에 있을까요? 없죠. 또 캐시 미스가 발생했네요. 다시 캐시 라인을 캐시로 이동시킵니다. 3, 4번도 마찬가지로 캐시 미스가 발생합니다. 이제 이해 되시나요? 이렇기 때문에 전통적인 OOP 방식으로 코딩하면 문제가 되는 겁니다.