SlideShare una empresa de Scribd logo
1 de 70
C++ Accelerated Massive Parallelism
            with Visual Studio 2012
강연 목표
목차


 GPGPU 소개

 C++ AMP 소개
C++ AMP

General-Purpose computing on Graphics Processing Units
왜 지금까지 GPU를 활용하지 않은 것인가?


 GPU가 연산한 결과를 CPU에서 접근 가능한가?

 그래픽 파이프라인에서 인접한 정보를 얻어올 수 있는가?

 GPU의 연산 능력은 충분한가?

 하드웨어 지원이 필수
전통적인 실행 모델

   CPU                       GPU



              Direct3D
Main Memory              Video Memory
Direct3D 11 그래픽 파이프라인
향상된 GPU 능력
C++ AMP의 탄생 배경
현재의 CPUs vs GPUs


        CPU                  GPU
      50GFlops              1TFlop
                    1GB/s


           10GB/s                    100GB/s



                            GPU RAM
      CPU RAM                 1 GB
       4-6 GB
현재의 CPUs vs GPUs


 GPU는 CPU에 비해 매우 빠른 연산 능력을 소유

 CPU는 GPU에 비해 매우 큰 메모리를 사용

 GPU는 CPU에 비해 넓은 대역폭을 사용

 CPU와 GPU 사이의 데이터 전송은 매우 느림
GPGPU


General-Purpose computing on Graphics Processing Units



 엄청난 수의 스레드를 통해서 연산.

 실수 연산에 최적화

 병렬 처리에 유용
DirectCompute


 MS 최초의 GPGPU 플랫폼 ( with HLSL )

 DirectX 10 부터 지원

 Direct3D API 를 이용해서 코딩
GPU          Video Memory
(SIMD Engine )
GPU          Video Memory
(SIMD Engine )
GPU          Video Memory
(SIMD Engine )



  SimpleCS
GPU            Video Memory
(SIMD Engine )



  SimpleCS       Buffer0( For Data )
GPU             Video Memory
(SIMD Engine )



  SimpleCS       Buffer0( For Data )



                 Buffer1( For Result )
GPU                   Video Memory
(SIMD Engine )



  SimpleCS       SRV   Buffer0( For Data )



                       Buffer1( For Result )
GPU                   Video Memory
(SIMD Engine )



  SimpleCS       SRV   Buffer0( For Data )



                 UAV   Buffer1( For Result )
GPU                   Video Memory
(SIMD Engine )



  SimpleCS       SRV   Buffer0( For Data )



                 UAV   Buffer1( For Result )
GPU                   Video Memory
(SIMD Engine )



  SimpleCS       SRV   Buffer0( For Data )



                 UAV   Buffer1( For Result )
GPU                   Video Memory
(SIMD Engine )



  SimpleCS       SRV   Buffer0( For Data )



                 UAV   Buffer1( For Result )
GPU                     Video Memory
(SIMD Engine )



  SimpleCS         SRV   Buffer0( For Data )

 SIMD       SIMD
                   UAV   Buffer1( For Result )
 SIMD       SIMD


        …
현재의 실행 모델

   CPU                       GPU



              Direct3D
Main Memory              Video Memory
DirectCompute 의 문제점


 XP 미지원

 어렵고, 난해함 ( 게임 프로그래머에게 익숙한 개념들 )

 GPU 전용 프로그래밍( APU 배제 )
C++ AMP


General-Purpose computing on Graphics Processing Units

 미래의 하드웨어 변화에도 용이하도록 설계

 Visual C++ 의 일부

 Visual Studio 2012 에 통합

 Direct3D 에서 구동 ( DX11 ~ )

 Performance, Productivity, Portability
C++ AMP Performance


 멀티-코어 CPU 보다 훨씬 빠름

 기존의 GPGPU 플랫폼들과 동일한 성능 향상 효과
C++ AMP Productivity


 최신 C++ 를 기반으로 제작 ( 템플릿 기반 구현 )

 Visual Studio 강력한 지원
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 )
Hello! C++ AMP
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. }
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. }
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. }
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. }
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. }
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. }
C++ AMP를 위한 개념들
accelerator
병렬 연산에 최적화된 하드웨어 ( CPU 포함 )
          Host         Accelerator (e.g. discrete GPU)




         CPUs
                     PCIe   GPU
                               GPU

     System memory                 GPU

                                       GPU
accelerator_view

하드웨어의 추상화


 스케쥴링( scheduling )


 메모리 관리
개발자 입장에서의 실행



    …                        …
    ……                       ……
…                       …
      Per Thread Registers




        Global Memory
C++ AMP Thread 식별
C++ AMP 에서는 매우 많은 스레드들이 동시에 실행
 index class
     Thread ID

 extend class
    array 혹은 array_view 데이터 배열의 면적들에 대한 길이
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>
array 의 결과 전송
array_view 의 결과 전송
restrict ( … )


 컴파일러에게 타겟을 알리는 역할

 현재 오직 두 가지만 구현( cpu, amp )
C++ AMP Tiled Model
스레드들의 그룹화
tiled thread




      …                              …
      ……                             ……
     …
    Per Thread
                                     …
                                  Per Thread
    Registers                      Registers
  Programmable                   Programmable
      Cache                          Cache
                 Global Memory
tile_static
C++ AMP 의 데이터 저장을 목적으로 하는 클래스
 Programmable Cache
   group shared memory
   현재 하드웨어에서는 스레드 그룹별로 16~48KB 할당
   오직 restrict( amp ) 함수 내에서만 사용 가능
   무척 빠른 액세스
   메모리 전송의 최소화로 인한 성능 향상
tiled_extent
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 )
tiled thread




      …                              …
      ……                             ……
     …
    Per Thread
                                     …
                                  Per Thread
    Registers                      Registers
  Programmable                   Programmable
      Cache                          Cache
                 Global Memory
tile_barrier


 타일 내 모든 스레드들을 동기화

 t_idx.barrier.wait();

 all_memory_fence, global_memory_fence,

 tile_static_memory_fence
C++ AMP의 미래
C++ AMP 목표
게임으로의 활용


 파티클 ( ex>ParticleSystemAPI )
참고 자료


 http://blogs.msdn.com/b/nativeconcurrency/
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp
[조진현]Kgc2012 c++amp

Más contenido relacionado

La actualidad más candente

2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예zupet
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel ProgrammingUNIST
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
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
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘Taewoo Lee
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1YEONG-CHEON YOU
 
[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍KyeongWon Koo
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기Jaeseung Ha
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 CudaSeok-joon Yun
 
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
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요? 내훈 정
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화Jaeseung Ha
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요NAVER D2
 
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현NAVER D2
 

La actualidad más candente (20)

2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예이권일 Sse 를 이용한 최적화와 실제 사용 예
이권일 Sse 를 이용한 최적화와 실제 사용 예
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel Programming
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
Cuda intro
Cuda introCuda intro
Cuda intro
 
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 .
 
GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘GPU를 위한 병렬 음원 방향 추정 알고리즘
GPU를 위한 병렬 음원 방향 추정 알고리즘
 
Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1Visual Studio를 이용한 어셈블리어 학습 part 1
Visual Studio를 이용한 어셈블리어 학습 part 1
 
[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍[0204 구경원] sse 병렬 프로그래밍
[0204 구경원] sse 병렬 프로그래밍
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda병렬프로그래밍과 Cuda
병렬프로그래밍과 Cuda
 
Ai based on gpu
Ai based on gpuAi based on gpu
Ai based on gpu
 
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
 
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요? (2013 DEVIEW) 멀티쓰레드 프로그래밍이  왜이리 힘드나요?
(2013 DEVIEW) 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
[NDC 2014] 던전앤파이터 클라이언트 로딩 최적화
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
 

Destacado

Dll파일 호출
Dll파일 호출Dll파일 호출
Dll파일 호출abapier
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)SeungIl Choi
 
Ccx03.cocos builder
Ccx03.cocos builderCcx03.cocos builder
Ccx03.cocos builder우진 이
 
GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터Mark Choi
 
4.5부동소수점
4.5부동소수점4.5부동소수점
4.5부동소수점JaeHong Park
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)SeongWan Kim
 
[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기Sun Park
 
C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2진상 문
 
게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출hongsungbock
 
Dom 생성과정
Dom 생성과정Dom 생성과정
Dom 생성과정abapier
 
Silverlight vs flash
Silverlight vs flashSilverlight vs flash
Silverlight vs flash권 태혁
 
GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체Mark Choi
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Thisisone Lee
 
[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉MinGeun Park
 
Digital lighting and rendering
Digital lighting and renderingDigital lighting and rendering
Digital lighting and renderingJaeHong Park
 
알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비SeungMin Yang
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 JiUng Choi
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2진상 문
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정funmeate
 

Destacado (20)

Dll파일 호출
Dll파일 호출Dll파일 호출
Dll파일 호출
 
Cocos2d x a to z (상)
Cocos2d x a to z (상)Cocos2d x a to z (상)
Cocos2d x a to z (상)
 
Ccx03.cocos builder
Ccx03.cocos builderCcx03.cocos builder
Ccx03.cocos builder
 
GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터GameMath-Chapter 01 벡터
GameMath-Chapter 01 벡터
 
투영 공식
투영 공식투영 공식
투영 공식
 
4.5부동소수점
4.5부동소수점4.5부동소수점
4.5부동소수점
 
3D Engine (ICON 2007)
3D Engine (ICON 2007)3D Engine (ICON 2007)
3D Engine (ICON 2007)
 
[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기[NDC14] 파워포인트로 그래픽 리소스 만들기
[NDC14] 파워포인트로 그래픽 리소스 만들기
 
C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2C# 뉴비를 위한 맛보기 2
C# 뉴비를 위한 맛보기 2
 
게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출게임 개발자로서의 가치 창출
게임 개발자로서의 가치 창출
 
Dom 생성과정
Dom 생성과정Dom 생성과정
Dom 생성과정
 
Silverlight vs flash
Silverlight vs flashSilverlight vs flash
Silverlight vs flash
 
GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체GameMath-Chapter 13 발사체
GameMath-Chapter 13 발사체
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2
 
[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉[C++ lab] 9. 디버깅 테크닉
[C++ lab] 9. 디버깅 테크닉
 
Digital lighting and rendering
Digital lighting and renderingDigital lighting and rendering
Digital lighting and rendering
 
알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비알고리즘 스터디 NP-완비
알고리즘 스터디 NP-완비
 
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록 [KGC2014] 울프나이츠 엔진 프로그래밍 기록
[KGC2014] 울프나이츠 엔진 프로그래밍 기록
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
 
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
모바일환경에서의 크로스 플랫폼_3D_렌더링엔진_제작과정
 

Similar a [조진현]Kgc2012 c++amp

[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례(Joe), Sanghun Kim
 
Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼ibmrep
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Gruter
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법NAVER D2
 
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
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340Samsung Electronics
 
딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)
딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)
딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)Amazon Web Services Korea
 
OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316기한 김
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Samsung Electronics
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집Daegwon Kim
 
이력서_김태연_한글
이력서_김태연_한글이력서_김태연_한글
이력서_김태연_한글TAIYEON KIM
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11민웅 이
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기YEONG-CHEON YOU
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012Chanho Song
 
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptxYeongKiKim1
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfkwbak
 

Similar a [조진현]Kgc2012 c++amp (20)

[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
[IBM 김상훈] AI 최적화 플랫폼 IBM AC922 소개와 활용 사례
 
Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼Ibm과 nvidia가 제안하는 딥러닝 플랫폼
Ibm과 nvidia가 제안하는 딥러닝 플랫폼
 
Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014Vectorized processing in_a_nutshell_DeView2014
Vectorized processing in_a_nutshell_DeView2014
 
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법[2B2]기계 친화성을 중심으로 접근한 최적화 기법
[2B2]기계 친화성을 중심으로 접근한 최적화 기법
 
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
 
kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340kics2013-winter-biomp-slide-20130127-1340
kics2013-winter-biomp-slide-20130127-1340
 
딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)
딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)
딥러닝계의 블루오션, Apache MXNet 공헌하기 - 윤석찬 (AWS 테크에반젤리스트) 오규삼 (삼성 SDS)
 
OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316OPEN_POWER8_SESSION_20150316
OPEN_POWER8_SESSION_20150316
 
Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900Remote-debugging-based-on-notrace32-20130619-1900
Remote-debugging-based-on-notrace32-20130619-1900
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집도커(Docker) 메트릭스 & 로그 수집
도커(Docker) 메트릭스 & 로그 수집
 
이력서_김태연_한글
이력서_김태연_한글이력서_김태연_한글
이력서_김태연_한글
 
Nvidia architecture
Nvidia architectureNvidia architecture
Nvidia architecture
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
Compute shader DX11
Compute shader DX11Compute shader DX11
Compute shader DX11
 
CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기CUDA를 게임 프로젝트에 적용하기
CUDA를 게임 프로젝트에 적용하기
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
 
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
광안 1반 2팀 엠퀴즈 최종 발표 자료.pptx
 
JVM_트러블슈팅.pdf
JVM_트러블슈팅.pdfJVM_트러블슈팅.pdf
JVM_트러블슈팅.pdf
 

Más de 진현 조

[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로진현 조
 
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑진현 조
 
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑진현 조
 
[Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈
[Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈 [Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈
[Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈 진현 조
 
[0319 조진현] 뇌를 자극하는 드라마 & 책
[0319 조진현] 뇌를 자극하는 드라마 & 책[0319 조진현] 뇌를 자극하는 드라마 & 책
[0319 조진현] 뇌를 자극하는 드라마 & 책진현 조
 
[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정
[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정
[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정진현 조
 
[1218 조진현] 폐차쿠챠 특집 행복한-게임개발자_되기
[1218 조진현] 폐차쿠챠 특집   행복한-게임개발자_되기[1218 조진현] 폐차쿠챠 특집   행복한-게임개발자_되기
[1218 조진현] 폐차쿠챠 특집 행복한-게임개발자_되기진현 조
 
[0108 조진현]출발 소프트웨어 렌더러
[0108 조진현]출발 소프트웨어 렌더러[0108 조진현]출발 소프트웨어 렌더러
[0108 조진현]출발 소프트웨어 렌더러진현 조
 
[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹진현 조
 
[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )진현 조
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개진현 조
 

Más de 진현 조 (11)

[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
[Gpg2권 조진현] 1.2 인라인 함수 대 매크로
 
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
 
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
[Gpg1권 조진현] 5.6 하드웨어 범프 매핑
 
[Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈
[Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈 [Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈
[Gpg1권 조진현] 4.16~4.20 실시간 사실적 지형 + 프랙탈
 
[0319 조진현] 뇌를 자극하는 드라마 & 책
[0319 조진현] 뇌를 자극하는 드라마 & 책[0319 조진현] 뇌를 자극하는 드라마 & 책
[0319 조진현] 뇌를 자극하는 드라마 & 책
 
[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정
[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정
[Gpg1권 조진현] 4.6 다해상도 맵을 이용한 충돌 판정
 
[1218 조진현] 폐차쿠챠 특집 행복한-게임개발자_되기
[1218 조진현] 폐차쿠챠 특집   행복한-게임개발자_되기[1218 조진현] 폐차쿠챠 특집   행복한-게임개발자_되기
[1218 조진현] 폐차쿠챠 특집 행복한-게임개발자_되기
 
[0108 조진현]출발 소프트웨어 렌더러
[0108 조진현]출발 소프트웨어 렌더러[0108 조진현]출발 소프트웨어 렌더러
[0108 조진현]출발 소프트웨어 렌더러
 
[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹[1211 조진현][gpg1]플로킹
[1211 조진현][gpg1]플로킹
 
[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
 

[조진현]Kgc2012 c++amp

  • 1.
  • 2. C++ Accelerated Massive Parallelism with Visual Studio 2012
  • 5. C++ AMP General-Purpose computing on Graphics Processing Units
  • 6.
  • 7. 왜 지금까지 GPU를 활용하지 않은 것인가?  GPU가 연산한 결과를 CPU에서 접근 가능한가?  그래픽 파이프라인에서 인접한 정보를 얻어올 수 있는가?  GPU의 연산 능력은 충분한가?  하드웨어 지원이 필수
  • 8. 전통적인 실행 모델 CPU GPU Direct3D Main Memory Video Memory
  • 9. Direct3D 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. GPGPU General-Purpose computing on Graphics Processing Units  엄청난 수의 스레드를 통해서 연산.  실수 연산에 최적화  병렬 처리에 유용
  • 15. DirectCompute  MS 최초의 GPGPU 플랫폼 ( with HLSL )  DirectX 10 부터 지원  Direct3D API 를 이용해서 코딩
  • 16.
  • 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. DirectCompute 의 문제점  XP 미지원  어렵고, 난해함 ( 게임 프로그래머에게 익숙한 개념들 )  GPU 전용 프로그래밍( APU 배제 )
  • 30. C++ AMP General-Purpose computing on Graphics Processing Units  미래의 하드웨어 변화에도 용이하도록 설계  Visual C++ 의 일부  Visual Studio 2012 에 통합  Direct3D 에서 구동 ( DX11 ~ )  Performance, Productivity, Portability
  • 31. C++ AMP Performance  멀티-코어 CPU 보다 훨씬 빠름  기존의 GPGPU 플랫폼들과 동일한 성능 향상 효과
  • 32. C++ AMP Productivity  최신 C++ 를 기반으로 제작 ( 템플릿 기반 구현 )  Visual Studio 강력한 지원
  • 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 )
  • 35.
  • 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. C++ AMP를 위한 개념들
  • 43. accelerator 병렬 연산에 최적화된 하드웨어 ( CPU 포함 ) Host Accelerator (e.g. discrete GPU) CPUs PCIe GPU GPU System memory GPU GPU
  • 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>
  • 50. restrict ( … )  컴파일러에게 타겟을 알리는 역할  현재 오직 두 가지만 구현( cpu, amp )
  • 51. C++ AMP Tiled Model
  • 52.
  • 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 ) 함수 내에서만 사용 가능  무척 빠른 액세스  메모리 전송의 최소화로 인한 성능 향상
  • 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 )
  • 58.
  • 59.
  • 60. tiled thread … … …… …… … Per Thread … Per Thread Registers Registers Programmable Programmable Cache Cache Global Memory
  • 61.
  • 62.
  • 63. tile_barrier  타일 내 모든 스레드들을 동기화  t_idx.barrier.wait();  all_memory_fence, global_memory_fence, tile_static_memory_fence
  • 66. 게임으로의 활용  파티클 ( ex>ParticleSystemAPI )