Vector Sum for a Large Vector

하나의 Block에는 1024개의 threads를 사용할 수 있습니다.

그래서 1024보다 큰 수를 계산할때는 Block을 여러개 생성해서 진행해주면 됩니다.

여기에서 thread의 위치를 찾기 위해서는

blockDim.x * blockIdx.x + threadIdx.x;

위와 같이 위치를 찾을 수 있습니다.

blockDim.x: Block 하나안에 있는 thread의 수

blockIdx.x: 몇번째 Block인지 나타내는 수

threadIdx.x: Block안의 몇번째 thread인지 나타내는 수

 

 


Thread 위치 찾기 연습

  • 1D block: threadIdx.x
  • 2D block: blockDim.x * threadIdx.y + threadIdx.x
  • 3D block: blockDim.x * blockDim.y * threadIdx.z + blockDim.x * threadIdx.y + threadIdx.x
  • Grid내 global thread ID: blockIdx.x * blockDim.x * blockDim.y * blockDim.z + TID_IN_BLOCK

 

 

  • 2D grid: blockIdx.y * (gridDim.x * NUM_THREAD_IN_BLOCK) + 1D_grid_TID
  • 3D grid: blockIdx.z * (gridDim.y * gridDim.x * NUM_THREAD_IN_BLOCK) + 2D_grid_TID

※ NUM_THREAD_IN_BLOCK: block.x * blockDim.y * blockDim.z

 


 

 

출처:

https://www.youtube.com/watch?v=KLPHCovPnfg&list=PLBrGAFAIyf5pp3QNigbh2hRU5EUD0crgI&index=18

'Cuda' 카테고리의 다른 글

08_Memory_Architecture_CUDA  (0) 2021.08.30
07_GPU_HardWare_CUDA  (0) 2021.08.30
05_How_Kernel_Works_CUDA  (0) 2021.08.30
04_Vector_Sum_CUDA  (0) 2021.08.27
03_Hello_CUDA_(Colab에서 CUDA 설정하기)  (0) 2021.08.26

+ Recent posts