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. DirectCompute 의 문제점
XP 미지원
어렵고, 난해함 ( 게임 프로그래머에게 익숙한 개념들 )
GPU 전용 프로그래밍( APU 배제 )
30. C++ AMP
General-Purpose computing on Graphics Processing Units
미래의 하드웨어 변화에도 용이하도록 설계
Visual C++ 의 일부
Visual Studio 2012 에 통합
Direct3D 에서 구동 ( DX11 ~ )
Performance, Productivity, Portability
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>
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 ) 함수 내에서만 사용 가능
무척 빠른 액세스
메모리 전송의 최소화로 인한 성능 향상