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가 존재)

'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 |