본문 바로가기

School Study/Multi Core Programming

Synchronization in CUDA

CUDA에서 Synchronization 하는 방법은 총 3가지가 있다.

  • Synchronization functions
  • Atomic functions
  • Manual control

 

Synchronization Function

  • __synchthreads()
    • Intra-block synchronization(Block 내 모든 thread가 도달)
  • __syncwarp
    • Inter-warp synchronization(Warp 내 모든 thread가 도달)
  • Device code에서 사용
    • Kernel or device functions

 

Atomic Functions
→ 여러 스레드가 들어와도 한 스레드가 한 번의 연산을 하는 것(한 번에 처리)을 보장하는 function

  • On 32-bit or 64-bit words
  • In global or shared memory

Types

  • Arithmetic functions
    • atomicAdd(), atomicSub(), atomicMin(), atomicMax(), Etc..
  • Bitwise function
    • atomicAnd(), atomicOr(), atomicXor()
  • CUDA C Programming Guide Appendix B.12

 

Manual control

  • Tools
    • Thread IDs
    • Atomic functions
    • Synchronization functions

 

블록 내부의 Synchronization뿐만 아니라 Global하게 Synchronization 할 수도 있다.
(함수가 따로 존재하지는 않는다.)

  • Kernel call 단위로 Global Sync.가 이루어진다.
    • Step에 따라 별도의 Kernel 작성
    • Syncronization이 필요한 영역을 나누어, Kernel을 반복 호출
      (커널과 커널 사이에는 Implicit barrier가 존재)

Global Syncronization

 

'School Study > Multi Core Programming' 카테고리의 다른 글

CUDA Event  (0) 2019.05.21
CUDA Stream & Concurrent Execution  (0) 2019.05.21
Maximizing Memory Throughput  (0) 2019.05.14
CUDA Memory Model  (0) 2019.05.07
CUDA Execution Model  (0) 2019.05.07