SlideShare a Scribd company logo
1 of 51
게임프로젝트에 적용하는 GPGPU
유영천
프리랜서
Twitter:@dgtman
GPGPU(General-Purpose computing on GPU
• GPU를 사용하여 CPU가 젂통적으로 취급했던 응용
프로그램들의 계산을 수행하는 기술
• GPU 코어 1개의 효율은 CPU 코어 1개에 비해 많이
떨어지지만 코어의 개수가 엄청나게 많다.
• 많은 수의 코어를 사용하면 산술술 연산
성능(Throughput)은 CPU의 성능보다 훨씬 뛰어나다.
GPU H/W
GK110의 블럭다이어그램 – 15 core CPU에 상응
SM CPU Core
SM CPU Core
2인 3각
경기를
연상하시라~
GPGPU의 특징
강점
• 엄청난 수의 스레드를 사용할
수 있다.
• 부동소수점 연산이 엄청
빠르다.
• 컨텍스트 스위칭이 엄청
빠르다.
• 그래서 충분히 병렬화된
산술처리에는 짱.
약점
• 흐름제어가 per SM으로
이루어진다.(2인3각 경기)
• 흐름제어 성능이 CPU에 비해
많이 떨어진다.
• 프로그래밍 기법의
제약(재귀호출불가)
• Core당 클럭이 CPU에 비해 많이
느리다(1/4 – 1/3수준)
적용분야
• Physics Simulation
• Video Processing
• Image Processing
• Astrophysics
• Medical Imaging
• More…
적용분야(for 일반인)
• Video Encoding/Decoding
• Game
– PhysX
– Megatexturing
– Compute Shader를 이용한 렌더링 보조
사용가능한 S/W제품들
• nvidia CUDA
• Microsoft AMP C++
• Open CL
• Direct X Direct Compute Shader
2885x4102크기의 이미지에 5x5
Gaussian Blur를 3회 적용
Image Processing 예제
참고)
이미지 필터링 코드는 CUDA, CPU 완젂 동일.
알고리즘상의 최적화는 없음.
병렬처리 효율의 비교를 위한 테스트임.
성능비교
Device Time(ms)
1Threads - Intel i7 2600K @3.8GHz 10054.3
8Threads - Intel i7 2600K @3.7GHz 2247.8
CUDA - GTX480 (15 SM x 32 Core = 480 Cores) 80.50
CUDA – GTX TITAN (14 SM x 192 Core = 2688 Cores) 59.92
GPGPU + 게임 프로젝트
+
GPGPU를 게임 프로젝트에 적용할 수
없을까?
• GPU의 엄청난 성능을 썩히고 싶지 않아!!!
• 병렬처리가 가능하면 좋을 것 같다는 느낌이 올
때가 있다.
– Light map 구우면서 꾸벅꾸벅 졸 때.
– 서버에서 충돌처리를 하는데 CPU점유율이 98%
– Xeon 8 core CPU는 너무 비싸!!!
게임 프로젝트 적용의 난점
• 유져의 장비가 GPGPU를 지원한다는 보장이
없다.(CUDA는 오로지 nvidia제품만 지원한다.
• 게임코드의 대부분은 의존성이 강하다. 즉
병렬처리에 적합하지 않다.
• 디버깅이 어렵다.
• 유져의 장비가 GPGPU를 지원한다는 보장이 없다.(CUDA는
오로지 nvidia제품만 지원한다.
– 게임 서버나 툴에서 사용한다.
– 게임 클라이언트에는 Direct Compute Shader를 사용한다.
• 게임코드의 대부분은 의존성이 강하다. 즉 병렬처리에
적합하지 않다.
– 병렬처리 할 수 있는 영역을 찾아보자.충돌처리라든가.
• 디버깅이 어렵다.
– CUDA + Parallel NSight를 사용한다.
그래도 게임프로젝트에 적용해보자.
CUDA (Compute Unified Device Architecture)
• C언어 등 산업 표준 언어를 사용하여 GPU에서
작동하는 병렬처리 코드를 작성할 수 있도록 하는
GPGPU기술
• nvidia가 개발,배포.그래서 nvidia GPU만 가능.
• PhysX,APEX,NVEncoder등 nvidia의 API들이 CUDA를
사용.
CUDA의 장점
• 자료가 많다.
• 유일하게 GPU상에서의 디버깅이 가능하다.
• C/C++에서의 포팅이 쉽다.
• 현재 나와있는 제품 중 가장 앞서있다.
– Dynamic parallelism, Hyper-Q, Unified Virtual
Addressing,…
실제로 적용하기
Server-Based 충돌처리
서버에서 충돌처리를 하면 좋은 점
• 위치,속도 Hack의 원첚 봉쇄
• 서버측에서 능동적으로 이것저것 하기 좋음
• 정밀한 위치 추척 가능(30,60프레임 단위로 처리 가능)
• 클라이언트에서 플레이어 제어하듯 서버에서도
플레이어,NPC,몬스터의 이동을 프로그래밍 가능.
CPU->GPGPU의 장점
• Throughput과 Responsibility를 향상시킨다.
• 비용을 줄인다
– [xeon급 이상에 한해서] 2배 성능의 CPU로
업그레이드 하는 것보다 2배 성능의 GPU로 GPU로
업그레이드 하는 편이 훨씬 싸다.
• 확장성이 좋다. GPU업그레이드에 따라 코드를
(거의) 수정하지 않아도 된다.
• 서버의 CPU자원을 남겨둘 수 있다.
구현 포인트
• 게임 오브젝트는 -> 타원체
• 건물,지형 -> 삼각형 집합
• 타원체 -> 1 Block에 대응
• Block내의 스레드들이 협력하여 충돌검출 및 리액션 처리
• Ex)
– 미끄러짐 예제
– 반사 예제
– 게임 클라이언트 적용 예제1
– 게임 클라이언트 적용 예제2
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
Thread
1
2
3
4
5
6
7
1
2
3
4
5
1
2
3
1
7
5
3
1
1 Obj -> 1 Block
Block Block Block Block
1
2
3
4
5
5
1
2
3
4
5
6
1
2
3
성능
• 테스트 조건
– 타원체 약 8000개
– 삼각형 77760개
– 타원체 VS 타원체, 타원체 VS 삼각형
– 유휴시갂 없이 최대프레임으로 충돌처리를
수행. 한벆 충돌처리에 걸리는 시갂 측정.
CPU i7 2600K (8Threads @3.7GHz) – 120ms
CUDA GTX480 – 40ms (CPU대비 약 3배)
Baking Light Maps
Baking Light Maps
• 건물,지형등 정적인 매시에 대해서 라이팅된
상태를 텍스쳐에 구워놓는다.
• Ambient Occlusion이나 Radiosity를 적용하려면
baking시갂이 엄청나게 오래 걸릮다.
• 텍셀갂 의존성이 거의 없고 throughput이
중요하므로 GPGPU로 처리하기에 매우
적합하다.
구현 포인트
• 게임의 맵에서 정적 라이트를 표현하는 Light Map을
CPU가 아닌 GPGPU(CUDA)로 굽는다.
• Directional Light, Omni Light계산 후 Radiosity로
난반사를 처리한다.
• Scene을 미리 KD-Tree로 만들어둔다.CUDA Global
Memory상에서 Tree를 빌드하는 것이 까다로울 수
있다.
• Texel당 CUDA 1 Thread로 처리한다.
• KD-Tree Traversal참고
성능
• 테스트 조건
– Light Map의 Texel수 = Patch수 = 386918개
– Directional Lighting후 1 pass Radiosity처리에
걸리는 시갂 측정
Device Time(ms)
GTX TITAN 17656ms
GTX 480 18297ms
GTX 460 35219ms
CPU i7 2600K 8 threads@3.7GHz 3513564ms추정
(1/3처리에
1171188ms소요)
시연
H/W Occlusion Culling – Compute
Shader
Occludee
Occludee
Occluder
Occlusion Culling
• 가려진 물체를 그리지 말자.
• Occluder가 Occludee를 가림
• 건물 벽에 가려서 안보이는 캐릭터..라든가.
Occludee
Occludee
Occluder
기본원리
• Occluder(raw맵 데이타나 거의 꼭 맞는
바운딩매쉬)를 그려서 Z-Buffer를 구성한다.
• Occludee(아마도 캐릭터나 맵데이타,기타 배치
가능한 오브젝트)를 그리되 pixel은 write하지
않고 z-test만 한다.
• 그려지는 픽셀 수를 GPU측 메모리에
기록해둔다.
• 나중에 GPU로부터 픽셀수를 얻어온다.
구현 포인트
• 갂략화된 Occluder매시(건물,산 등)를 z-buffer에
그릮다.
• Z-buffer의 mip-chain을 생성한다.
• Occludee의 경계구 목록을 Compute Shader로
넘긴다.
• Compute Shader에서 Occludee 경계구의 사이즈에
맞는 z-map을 선택하고 z값을 비교한다.
• Compute Shader에서 버퍼에 저장한 결과를
CPU측에서 읽어온다.
Compute Shader사용의 장점
• 다수의 Occludee에 대해 병렬적으로 Z-Test를
수행할 수 있다.
• Z-Buffer에 Lock을 걸어서 메모리로 읽어오지
않아도 된다.(속도 차이가 엄청나다!)
성능
<입력 오브젝트 대략 700개일때>
Method Objects FPS
No Occulusion Culling 376 430
D3DQuery Occlusion Culling 31 561
Hierarchical Z Map Occlusion Culling
– Compute Shader
31 713
테스트하는 Occludee 개수가 많아질수록 격차가 더 커짐
시연
A* 길찾기
길찾기 서버를 만들면 어떨까?
구현 포인트
• 8방향 길찾기에서 8방향에 대해 각각 8
threads씩 대응.
• 각 thread는 F,G,H값을 구하고 Open List와
Closed List에 넣고 빼는 작업을 병렬로 처리
성능
• CPU와 비슷하거나 더 느림.
• 망한 사례(T_T)
• 성능 향상의 여지는 있으므로 연구 가치 있음.
• 길찾기 서버로 사용한다면 서버의 CPU자원을
확보할 수 있다.
기타응용
• NVEncoder를
이용한 실시갂
h264인코딩
• Voxelization
결론
GPU랑 CPU랑 어느게 빨라요?
그때 그때 달라요~
병렬화에 적합한지를 따져보자
부적합한 경우
• 분기가 많다.
• 각 요소들의 의존성이
높다.(병렬화 하기 나쁘다)
• Throughput보다
Responsibility가
중요하다.(100ms or
50ms에 목숨을 건다!)
적합한 경우
• 코드에서 분기가 적다.
• Image Processing처럼 각
요소들의 의존성이 낮다.
– (병렬화 하기 좋다.)
• Throughput이 중요한
경우.(3일걸리던 작업을
1일로 줄였다!!!)
GPGPU적용시 고려사항
• 용도 – 병렬화에 적합한지
• 비용 – CPU vs GPU추가 비용
• 유지보수 – 디버깅과 코드 작성 비용
• 확장성 – CPU추가 or GPU업그레이드시
성능향상폭
참고문헌
• CUDA
– Programming Massively Parallel Processors (David
B.Kirk , Wen-mei W. Hwu)
– nvidia GPU Computing SDK 5.0 Documents
• H/W Occlusion Culling
– http://www.nickdarnell.com/2010/06/hierarchical
-z-buffer-occlusion-culling/
Q/A

More Related Content

What's hot

멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)Bongseok Cho
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법YEONG-CHEON YOU
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬KyeongWon Koo
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013devCAT Studio, NEXON
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀승명 양
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기ChangKyu Song
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019devCAT Studio, NEXON
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법Chris Ohk
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013영욱 오
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지강 민우
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능Yongha Kim
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들영욱 오
 

What's hot (20)

멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬[0903 구경원] recast 네비메쉬
[0903 구경원] recast 네비메쉬
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
Windows system - memory개념잡기
Windows system - memory개념잡기Windows system - memory개념잡기
Windows system - memory개념잡기
 
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
김동건, 할머니가 들려주신 마비노기 개발 전설, NDC2019
 
게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법게임 프로그래밍 기초 공부법
게임 프로그래밍 기초 공부법
 
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
게임에서 흔히 쓰이는 최적화 전략 by 엄윤섭 @ 지스타 컨퍼런스 2013
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능[NDC 2009] 행동 트리로 구현하는 인공지능
[NDC 2009] 행동 트리로 구현하는 인공지능
 
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
 

Similar to 게임프로젝트에 적용하는 GPGPU

CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기YEONG-CHEON YOU
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4민웅 이
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기YEONG-CHEON YOU
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론Hyunjik Bae
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)SeongWan Kim
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 CudaSeok-joon Yun
 
윤석준 2015 cuda_contest
윤석준 2015 cuda_contest윤석준 2015 cuda_contest
윤석준 2015 cuda_contestSeok-joon Yun
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교Daniel Lim
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018devCAT Studio, NEXON
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법NAVER D2
 
Theano 와 Caffe 실습
Theano 와 Caffe 실습 Theano 와 Caffe 실습
Theano 와 Caffe 실습 정주 김
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipelinechangehee lee
 

Similar to 게임프로젝트에 적용하는 GPGPU (20)

CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4니시카와젠지의 3 d 게임 팬을 위한 ps4
니시카와젠지의 3 d 게임 팬을 위한 ps4
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기서버와 클라이언트 같은 엔진 사용하기
서버와 클라이언트 같은 엔진 사용하기
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론KGC 2014: 분산 게임 서버 구조론
KGC 2014: 분산 게임 서버 구조론
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
 
윤석준 2015 cuda_contest
윤석준 2015 cuda_contest윤석준 2015 cuda_contest
윤석준 2015 cuda_contest
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교Java와 go 간의 병렬 프로그램 성능 비교
Java와 go 간의 병렬 프로그램 성능 비교
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
이승재, 실버바인 서버엔진 2 설계 리뷰, NDC2018
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
Theano 와 Caffe 실습
Theano 와 Caffe 실습 Theano 와 Caffe 실습
Theano 와 Caffe 실습
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 

More from YEONG-CHEON YOU

DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개YEONG-CHEON YOU
 
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트YEONG-CHEON YOU
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2YEONG-CHEON YOU
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 
XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)YEONG-CHEON YOU
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5YEONG-CHEON YOU
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술YEONG-CHEON YOU
 
win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기YEONG-CHEON YOU
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기YEONG-CHEON YOU
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIYEONG-CHEON YOU
 
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2YEONG-CHEON YOU
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayYEONG-CHEON YOU
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appYEONG-CHEON YOU
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~YEONG-CHEON YOU
 
DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발YEONG-CHEON YOU
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 

More from YEONG-CHEON YOU (18)

DirectStroage프로그래밍소개
DirectStroage프로그래밍소개DirectStroage프로그래밍소개
DirectStroage프로그래밍소개
 
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
CUDA Raytracing을 이용한 Voxel오브젝트 가시성 테스트
 
Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)XDK없이 XBOX게임 개발하기(UWP on XBOX)
XDK없이 XBOX게임 개발하기(UWP on XBOX)
 
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
 
빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술빠른 렌더링을 위한 오브젝트 제외 기술
빠른 렌더링을 위한 오브젝트 제외 기술
 
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
 
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
 
win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기win32 app에서 UWP API호출하기
win32 app에서 UWP API호출하기
 
Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기Azure로 MMO게임 서비스하기
Azure로 MMO게임 서비스하기
 
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
 
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
 
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
프로그래밍 언어의 F1머신 C++을 타고 Windows 10 UWP 앱 개발의 세계로~
 
DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발DirectX + C++을 이용한  WindowsStore App과 Windows Phone용 게임 개발
DirectX + C++을 이용한 WindowsStore App과 Windows Phone용 게임 개발
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 

게임프로젝트에 적용하는 GPGPU

  • 2. GPGPU(General-Purpose computing on GPU • GPU를 사용하여 CPU가 젂통적으로 취급했던 응용 프로그램들의 계산을 수행하는 기술 • GPU 코어 1개의 효율은 CPU 코어 1개에 비해 많이 떨어지지만 코어의 개수가 엄청나게 많다. • 많은 수의 코어를 사용하면 산술술 연산 성능(Throughput)은 CPU의 성능보다 훨씬 뛰어나다.
  • 4. GK110의 블럭다이어그램 – 15 core CPU에 상응
  • 6. SM CPU Core 2인 3각 경기를 연상하시라~
  • 7. GPGPU의 특징 강점 • 엄청난 수의 스레드를 사용할 수 있다. • 부동소수점 연산이 엄청 빠르다. • 컨텍스트 스위칭이 엄청 빠르다. • 그래서 충분히 병렬화된 산술처리에는 짱. 약점 • 흐름제어가 per SM으로 이루어진다.(2인3각 경기) • 흐름제어 성능이 CPU에 비해 많이 떨어진다. • 프로그래밍 기법의 제약(재귀호출불가) • Core당 클럭이 CPU에 비해 많이 느리다(1/4 – 1/3수준)
  • 8. 적용분야 • Physics Simulation • Video Processing • Image Processing • Astrophysics • Medical Imaging • More…
  • 9. 적용분야(for 일반인) • Video Encoding/Decoding • Game – PhysX – Megatexturing – Compute Shader를 이용한 렌더링 보조
  • 10. 사용가능한 S/W제품들 • nvidia CUDA • Microsoft AMP C++ • Open CL • Direct X Direct Compute Shader
  • 11. 2885x4102크기의 이미지에 5x5 Gaussian Blur를 3회 적용 Image Processing 예제
  • 12. 참고) 이미지 필터링 코드는 CUDA, CPU 완젂 동일. 알고리즘상의 최적화는 없음. 병렬처리 효율의 비교를 위한 테스트임. 성능비교 Device Time(ms) 1Threads - Intel i7 2600K @3.8GHz 10054.3 8Threads - Intel i7 2600K @3.7GHz 2247.8 CUDA - GTX480 (15 SM x 32 Core = 480 Cores) 80.50 CUDA – GTX TITAN (14 SM x 192 Core = 2688 Cores) 59.92
  • 13. GPGPU + 게임 프로젝트 +
  • 14. GPGPU를 게임 프로젝트에 적용할 수 없을까? • GPU의 엄청난 성능을 썩히고 싶지 않아!!! • 병렬처리가 가능하면 좋을 것 같다는 느낌이 올 때가 있다. – Light map 구우면서 꾸벅꾸벅 졸 때. – 서버에서 충돌처리를 하는데 CPU점유율이 98% – Xeon 8 core CPU는 너무 비싸!!!
  • 15. 게임 프로젝트 적용의 난점 • 유져의 장비가 GPGPU를 지원한다는 보장이 없다.(CUDA는 오로지 nvidia제품만 지원한다. • 게임코드의 대부분은 의존성이 강하다. 즉 병렬처리에 적합하지 않다. • 디버깅이 어렵다.
  • 16. • 유져의 장비가 GPGPU를 지원한다는 보장이 없다.(CUDA는 오로지 nvidia제품만 지원한다. – 게임 서버나 툴에서 사용한다. – 게임 클라이언트에는 Direct Compute Shader를 사용한다. • 게임코드의 대부분은 의존성이 강하다. 즉 병렬처리에 적합하지 않다. – 병렬처리 할 수 있는 영역을 찾아보자.충돌처리라든가. • 디버깅이 어렵다. – CUDA + Parallel NSight를 사용한다. 그래도 게임프로젝트에 적용해보자.
  • 17. CUDA (Compute Unified Device Architecture) • C언어 등 산업 표준 언어를 사용하여 GPU에서 작동하는 병렬처리 코드를 작성할 수 있도록 하는 GPGPU기술 • nvidia가 개발,배포.그래서 nvidia GPU만 가능. • PhysX,APEX,NVEncoder등 nvidia의 API들이 CUDA를 사용.
  • 18. CUDA의 장점 • 자료가 많다. • 유일하게 GPU상에서의 디버깅이 가능하다. • C/C++에서의 포팅이 쉽다. • 현재 나와있는 제품 중 가장 앞서있다. – Dynamic parallelism, Hyper-Q, Unified Virtual Addressing,…
  • 21. 서버에서 충돌처리를 하면 좋은 점 • 위치,속도 Hack의 원첚 봉쇄 • 서버측에서 능동적으로 이것저것 하기 좋음 • 정밀한 위치 추척 가능(30,60프레임 단위로 처리 가능) • 클라이언트에서 플레이어 제어하듯 서버에서도 플레이어,NPC,몬스터의 이동을 프로그래밍 가능.
  • 22. CPU->GPGPU의 장점 • Throughput과 Responsibility를 향상시킨다. • 비용을 줄인다 – [xeon급 이상에 한해서] 2배 성능의 CPU로 업그레이드 하는 것보다 2배 성능의 GPU로 GPU로 업그레이드 하는 편이 훨씬 싸다. • 확장성이 좋다. GPU업그레이드에 따라 코드를 (거의) 수정하지 않아도 된다. • 서버의 CPU자원을 남겨둘 수 있다.
  • 23. 구현 포인트 • 게임 오브젝트는 -> 타원체 • 건물,지형 -> 삼각형 집합 • 타원체 -> 1 Block에 대응 • Block내의 스레드들이 협력하여 충돌검출 및 리액션 처리 • Ex) – 미끄러짐 예제 – 반사 예제 – 게임 클라이언트 적용 예제1 – 게임 클라이언트 적용 예제2
  • 25. 성능 • 테스트 조건 – 타원체 약 8000개 – 삼각형 77760개 – 타원체 VS 타원체, 타원체 VS 삼각형 – 유휴시갂 없이 최대프레임으로 충돌처리를 수행. 한벆 충돌처리에 걸리는 시갂 측정.
  • 26. CPU i7 2600K (8Threads @3.7GHz) – 120ms CUDA GTX480 – 40ms (CPU대비 약 3배)
  • 28. Baking Light Maps • 건물,지형등 정적인 매시에 대해서 라이팅된 상태를 텍스쳐에 구워놓는다. • Ambient Occlusion이나 Radiosity를 적용하려면 baking시갂이 엄청나게 오래 걸릮다. • 텍셀갂 의존성이 거의 없고 throughput이 중요하므로 GPGPU로 처리하기에 매우 적합하다.
  • 29. 구현 포인트 • 게임의 맵에서 정적 라이트를 표현하는 Light Map을 CPU가 아닌 GPGPU(CUDA)로 굽는다. • Directional Light, Omni Light계산 후 Radiosity로 난반사를 처리한다. • Scene을 미리 KD-Tree로 만들어둔다.CUDA Global Memory상에서 Tree를 빌드하는 것이 까다로울 수 있다. • Texel당 CUDA 1 Thread로 처리한다. • KD-Tree Traversal참고
  • 30. 성능 • 테스트 조건 – Light Map의 Texel수 = Patch수 = 386918개 – Directional Lighting후 1 pass Radiosity처리에 걸리는 시갂 측정
  • 31. Device Time(ms) GTX TITAN 17656ms GTX 480 18297ms GTX 460 35219ms CPU i7 2600K 8 threads@3.7GHz 3513564ms추정 (1/3처리에 1171188ms소요)
  • 33. H/W Occlusion Culling – Compute Shader Occludee Occludee Occluder
  • 34. Occlusion Culling • 가려진 물체를 그리지 말자. • Occluder가 Occludee를 가림 • 건물 벽에 가려서 안보이는 캐릭터..라든가.
  • 36. 기본원리 • Occluder(raw맵 데이타나 거의 꼭 맞는 바운딩매쉬)를 그려서 Z-Buffer를 구성한다. • Occludee(아마도 캐릭터나 맵데이타,기타 배치 가능한 오브젝트)를 그리되 pixel은 write하지 않고 z-test만 한다. • 그려지는 픽셀 수를 GPU측 메모리에 기록해둔다. • 나중에 GPU로부터 픽셀수를 얻어온다.
  • 37. 구현 포인트 • 갂략화된 Occluder매시(건물,산 등)를 z-buffer에 그릮다. • Z-buffer의 mip-chain을 생성한다. • Occludee의 경계구 목록을 Compute Shader로 넘긴다. • Compute Shader에서 Occludee 경계구의 사이즈에 맞는 z-map을 선택하고 z값을 비교한다. • Compute Shader에서 버퍼에 저장한 결과를 CPU측에서 읽어온다.
  • 38. Compute Shader사용의 장점 • 다수의 Occludee에 대해 병렬적으로 Z-Test를 수행할 수 있다. • Z-Buffer에 Lock을 걸어서 메모리로 읽어오지 않아도 된다.(속도 차이가 엄청나다!)
  • 39. 성능 <입력 오브젝트 대략 700개일때> Method Objects FPS No Occulusion Culling 376 430 D3DQuery Occlusion Culling 31 561 Hierarchical Z Map Occlusion Culling – Compute Shader 31 713 테스트하는 Occludee 개수가 많아질수록 격차가 더 커짐
  • 43. 구현 포인트 • 8방향 길찾기에서 8방향에 대해 각각 8 threads씩 대응. • 각 thread는 F,G,H값을 구하고 Open List와 Closed List에 넣고 빼는 작업을 병렬로 처리
  • 44. 성능 • CPU와 비슷하거나 더 느림. • 망한 사례(T_T) • 성능 향상의 여지는 있으므로 연구 가치 있음. • 길찾기 서버로 사용한다면 서버의 CPU자원을 확보할 수 있다.
  • 47. GPU랑 CPU랑 어느게 빨라요? 그때 그때 달라요~
  • 48. 병렬화에 적합한지를 따져보자 부적합한 경우 • 분기가 많다. • 각 요소들의 의존성이 높다.(병렬화 하기 나쁘다) • Throughput보다 Responsibility가 중요하다.(100ms or 50ms에 목숨을 건다!) 적합한 경우 • 코드에서 분기가 적다. • Image Processing처럼 각 요소들의 의존성이 낮다. – (병렬화 하기 좋다.) • Throughput이 중요한 경우.(3일걸리던 작업을 1일로 줄였다!!!)
  • 49. GPGPU적용시 고려사항 • 용도 – 병렬화에 적합한지 • 비용 – CPU vs GPU추가 비용 • 유지보수 – 디버깅과 코드 작성 비용 • 확장성 – CPU추가 or GPU업그레이드시 성능향상폭
  • 50. 참고문헌 • CUDA – Programming Massively Parallel Processors (David B.Kirk , Wen-mei W. Hwu) – nvidia GPU Computing SDK 5.0 Documents • H/W Occlusion Culling – http://www.nickdarnell.com/2010/06/hierarchical -z-buffer-occlusion-culling/
  • 51. Q/A