Recommended
PPTX
[조진현] [Kgc2011]direct x11 이야기
PPTX
[KGC2014] DX9에서DX11로의이행경험공유
PPTX
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
PDF
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
PPTX
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
PDF
PDF
멀티스레드 렌더링 (Multithreaded rendering)
PPTX
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
PDF
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
PDF
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
PDF
PDF
PPTX
이권일 Sse 를 이용한 최적화와 실제 사용 예
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PPTX
Tips and experience of DX12 Engine development .
PDF
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PDF
Visual Studio를 이용한 어셈블리어 학습 part 1
PPTX
Tips and experience_of_dx12_engine_development._ver_1.2
PPTX
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
PDF
PPTX
PPTX
PDF
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
PDF
PPTX
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
PPTX
PPTX
Introduction to Parallel Programming
PPTX
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
PPT
PPT
More Related Content
PPTX
[조진현] [Kgc2011]direct x11 이야기
PPTX
[KGC2014] DX9에서DX11로의이행경험공유
PPTX
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
PDF
박기헌 NDC12 초보 클라이언트 프로그래머의 병렬 프로그래밍 도전기
PPTX
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
PDF
PDF
멀티스레드 렌더링 (Multithreaded rendering)
PPTX
Python의 계산성능 향상을 위해 Fortran, C, CUDA-C, OpenCL-C 코드들과 연동하기
What's hot
PDF
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
PDF
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
PDF
PDF
PPTX
이권일 Sse 를 이용한 최적화와 실제 사용 예
PDF
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
PPTX
Tips and experience of DX12 Engine development .
PDF
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PDF
Visual Studio를 이용한 어셈블리어 학습 part 1
PPTX
Tips and experience_of_dx12_engine_development._ver_1.2
PPTX
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
PDF
PPTX
PPTX
PDF
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
PDF
PPTX
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
PPTX
PPTX
Introduction to Parallel Programming
PPTX
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
Viewers also liked
PPT
PPT
PPTX
PPTX
PPTX
Digital lighting and rendering
PPTX
PPTX
PPTX
PPTX
PPTX
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
PPTX
PPTX
PDF
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
PDF
PPTX
PPTX
PPTX
PPTX
PDF
[NDC14] 파워포인트로 그래픽 리소스 만들기
PPT
Similar to [조진현]Kgc2012 c++amp
PDF
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
PPTX
PDF
PPTX
PDF
리소스 중심의 서든어택2 실시간 메모리 프로파일링 시스템 개발기
PDF
Gpgpu how to make bruteforcing tool using gpgpu
PPTX
PPTX
CUDA 프로그래밍 기초 MODUCON2018
PDF
PPTX
PPTX
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
PDF
ffmpeg optimization using CUDA
PPTX
PDF
PPTX
Visual C++10을 활용한 병렬 프로그래밍
PPTX
PPTX
[0618구경원]초보 게임프로그래머를 위한 c++
PPTX
불어오는 변화의 바람, From c++98 to c++11, 14
PDF
PDF
Concurrency in action - chapter 5
More from 진현 조
PPTX
PPTX
PPTX
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
PPTX
[1106 조진현] if you( batch rendering )
PPTX
PPTX
[0319 조진현] 뇌를 자극하는 드라마 & 책
PPTX
[Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈
PPTX
[1218 조진현] 폐차쿠챠 특집 행복한-게임개발자_되기
PPTX
[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정
PPTX
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
PPTX
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[조진현]Kgc2012 c++amp 2. 3. 4. 5. 7. 왜 지금까지 GPU를 활용하지 않은 것인가?
GPU가 연산한 결과를 CPU에서 접근 가능한가?
그래픽 파이프라인에서 인접한 정보를 얻어올 수 있는가?
GPU의 연산 능력은 충분한가?
하드웨어 지원이 필수
8. 전통적인 실행 모델
CPU GPU
Direct3D
Main Memory Video Memory
9. 10. 11. 12. 현재의 CPUs vs GPUs
CPU GPU
50GFlops 1TFlop
1GB/s
10GB/s 100GB/s
GPU RAM
CPU RAM 1 GB
4-6 GB
13. 현재의 CPUs vs GPUs
GPU는 CPU에 비해 매우 빠른 연산 능력을 소유
CPU는 GPU에 비해 매우 큰 메모리를 사용
GPU는 CPU에 비해 넓은 대역폭을 사용
CPU와 GPU 사이의 데이터 전송은 매우 느림
14. 15. 17. GPU Video Memory
(SIMD Engine )
18. GPU Video Memory
(SIMD Engine )
19. GPU Video Memory
(SIMD Engine )
SimpleCS
20. GPU Video Memory
(SIMD Engine )
SimpleCS Buffer0( For Data )
21. GPU Video Memory
(SIMD Engine )
SimpleCS Buffer0( For Data )
Buffer1( For Result )
22. GPU Video Memory
(SIMD Engine )
SimpleCS SRV Buffer0( For Data )
Buffer1( For Result )
23. GPU Video Memory
(SIMD Engine )
SimpleCS SRV Buffer0( For Data )
UAV Buffer1( For Result )
24. GPU Video Memory
(SIMD Engine )
SimpleCS SRV Buffer0( For Data )
UAV Buffer1( For Result )
25. GPU Video Memory
(SIMD Engine )
SimpleCS SRV Buffer0( For Data )
UAV Buffer1( For Result )
26. GPU Video Memory
(SIMD Engine )
SimpleCS SRV Buffer0( For Data )
UAV Buffer1( For Result )
27. GPU Video Memory
(SIMD Engine )
SimpleCS SRV Buffer0( For Data )
SIMD SIMD
UAV Buffer1( For Result )
SIMD SIMD
…
28. 현재의 실행 모델
CPU GPU
Direct3D
Main Memory Video Memory
29. 30. C++ AMP
General-Purpose computing on Graphics Processing Units
미래의 하드웨어 변화에도 용이하도록 설계
Visual C++ 의 일부
Visual Studio 2012 에 통합
Direct3D 에서 구동 ( DX11 ~ )
Performance, Productivity, Portability
31. 32. 33. C++ AMP Portability
DirectX 11 드라이버를 지원하는 모든 GPU
NVIDIA GPUs
AMD GPUs, APUs
Intel GPUs ( Ivy Bridge, … )
ARM GPUs ( Mali design, … )
GPU 가 사용 불가능일 경우, CPU로 실행
AMD / Intel CPUs ( multi-core, SSE )
ARM CPUs ( multi-core, NEON )
34. 36. 1. #include <iostream>
2.
3.
4. int main()
5. {
6. int v[11] = {'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c'};
7.
8. for (int idx = 0; idx < 11; idx++)
9. {
10. v[idx] += 1;
11. }
12. for(unsigned int i = 0; i < 11; i++)
13. std::cout << static_cast<char>( v[i]);
14. }
37. 1. #include <iostream>
2. #include <amp.h>
3. using namespace concurrency;
4. int main()
5. {
6. int v[11] = {'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c'};
7.
8. for (int idx = 0; idx < 11; idx++)
9. {
10. v[idx] += 1;
11. }
12. for(unsigned int i = 0; i < 11; i++)
13. std::cout << static_cast<char>( v[i]);
14. }
38. 1. #include <iostream>
2. #include <amp.h>
3. using namespace concurrency;
4. int main()
5. {
6. int v[11] = {'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c'};
7. array_view<int> av(11, v);
8. for (int idx = 0; idx < 11; idx++)
9. {
10. v[idx] += 1;
11. }
12. for(unsigned int i = 0; i < 11; i++)
13. std::cout << static_cast<char>( v[i]);
14. }
39. 1. #include <iostream>
2. #include <amp.h>
3. using namespace concurrency;
4. int main()
5. {
6. int v[11] = {'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c'};
7. array_view<int> av(11, v);
8. for (int idx = 0; idx < 11; idx++)
9. {
10. av[idx] += 1;
11. }
12. for(unsigned int i = 0; i < 11; i++)
13. std::cout << static_cast<char>( v[i]);
14. }
40. 1. #include <iostream>
2. #include <amp.h>
3. using namespace concurrency;
4. int main()
5. {
6. int v[11] = {'G', 'd', 'k', 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c'};
7. array_view<int> av(11, v);
8. for (int idx = 0; idx < 11; idx++)
9. {
10. av[idx] += 1;
11. }
12. for(unsigned int i = 0; i < 11; i++)
13. std::cout << static_cast<char>(av[i]);
14. }
41. 1. #include <iostream>
C++ AMP “Hello World”
2. #include <amp.h>
3. using namespace concurrency;
4. •int main() New -> Project
File ->
5. {
6.
• Empty=Project 'k', 'n', 31, 'v', 'n', 'q', 'k', 'c'};
int v[11] {'G', 'd', 'k',
• Project -> Add New Item
7. array_view<int> av(11, v);
8. • Empty C++ file
parallel_for_each(av.extent, [=](index<1> idx) restrict(amp)
9. {
10. av[idx] += 1;
11. });
12. for(unsigned int i = 0; i < 11; i++)
13. std::cout << static_cast<char>(av[i]);
14. }
42. 43. accelerator
병렬 연산에 최적화된 하드웨어 ( CPU 포함 )
Host Accelerator (e.g. discrete GPU)
CPUs
PCIe GPU
GPU
System memory GPU
GPU
44. 45. 개발자 입장에서의 실행
… …
…… ……
… …
Per Thread Registers
Global Memory
46. C++ AMP Thread 식별
C++ AMP 에서는 매우 많은 스레드들이 동시에 실행
index class
Thread ID
extend class
array 혹은 array_view 데이터 배열의 면적들에 대한 길이
47. C++ AMP 에서의 메모리
accelerator 상의 메모리에 존재
concurrency::array
데이터 컨테이너 ( deep copy ), 연속된 메모리 블럭
array< T, N >, N <= 128 ( ex>array<float, 2> b( 4, 2 ); )
concurrency::array_view
데이터 랩퍼( STL의 iterator 과 유사 )
array< T, N >
Concurrency::graphics::texture,
Concurrency::graphics::writeonly_texture_view
#include <amp_graphics.h>
48. 49. 50. restrict ( … )
컴파일러에게 타겟을 알리는 역할
현재 오직 두 가지만 구현( cpu, amp )
51. 53. 54. tiled thread
… …
…… ……
…
Per Thread
…
Per Thread
Registers Registers
Programmable Programmable
Cache Cache
Global Memory
55. tile_static
C++ AMP 의 데이터 저장을 목적으로 하는 클래스
Programmable Cache
group shared memory
현재 하드웨어에서는 스레드 그룹별로 16~48KB 할당
오직 restrict( amp ) 함수 내에서만 사용 가능
무척 빠른 액세스
메모리 전송의 최소화로 인한 성능 향상
56. 57. tiled_index
array_view<int,2> data(2, 6, p_my_data);
parallel_for_each(
data.extent.tile<2,2>(),
[=] (tiled_index<2,2> t_idx)… { … });
col 0 col 1 col 2 col 3 col 4 col 5
row
0
row
1
T
t_idx.global // index< 2 > ( 1, 3 )
t.idx.local // index< 2 > ( 1, 1 )
t.idx.tile // index< 2 > ( 0, 1 )
t.idx.origin // index< 2 > ( 0, 2 )
60. tiled thread
… …
…… ……
…
Per Thread
…
Per Thread
Registers Registers
Programmable Programmable
Cache Cache
Global Memory
63. tile_barrier
타일 내 모든 스레드들을 동기화
t_idx.barrier.wait();
all_memory_fence, global_memory_fence,
tile_static_memory_fence
64. 65. 66. 67.