적절한 곳에 적당한 메모리를 사용하자!

ex) block-local data는 shared memory

ex) read only -> constant memory

 

Design your kernel and block

memory 사용량을 고려해서 병렬처리의 효율을 높이자!

 

 

Active Warp

 

Warp는 32개의 Thread를 묶어둔것이고 하나의 Instruction에 의해 동작합니다.

Warp에 있는 모든 Thread들이 Register Memory 공간을 할당 받은 상태를 Active Warp라고 합니다.

 

ex) Block 안에 Register 용량이 64KB이고 1024개의 Thread들이 있습니다.

하나의 Thread가 필요한 memory는 128이라면

64KB(64 * 1024) / 128 = 512

즉, 1024개중 512개의 Thread만 사용하고 나머지 512개의 Thread는 놀고 있다는 뜻입니다.

여기서 사용되고 있는 512개 즉, 16개의 Warp를 Active Warp라고 합니다.

 

 


Active Block

자신이 필요한 Shared Memory 공간을 다 할당받은 Block.

 

 


Occupancy

실제로 수행할 수 있는 Active Warp 수의 비율 즉, Occupancy가 높으면 Maximize parallelism

※ Active Warps / Maximum Warps

 

  • Thread당 Register 수
  • Block 당 Thread 수
  • Block이 사용하는 Shared Memory 수

 

Occupancy Calculator

Occupancy를 계산하기 위한 툴!

cuda 설치된 위치 → NVIDIA GPU Computing Toolkit → tools →CUDA_Occupancy_Calculator.xls

 

여기서 주황색 영역의 맨 오른쪽 3개를 조정하며 최적의 값들을 찾으면 됩니다.

 

 


Register 수 지정하기

Default 값은 0이며, 자동으로 잡아준다.

 

 

출처:

https://www.youtube.com/watch?v=PzV7h4v9ANs&list=PLBrGAFAIyf5pp3QNigbh2hRU5EUD0crgI&index=21

'Cuda' 카테고리의 다른 글

11_Using Shared Memory_Example_Quiz_2_CUDA  (0) 2021.09.02
10_Using Shared Memory_Example_Quiz_1_CUDA  (0) 2021.09.01
08_Memory_Architecture_CUDA  (0) 2021.08.30
07_GPU_HardWare_CUDA  (0) 2021.08.30
06_Where_is_Thread_CUDA  (0) 2021.08.30

+ Recent posts