Shared Memory
- Memory Bank
- 데이터의 접근 통로
- Shared Memory는 32개의 bank로 구성되어 있음
- 구성단위: 4 byte or 8 byte (compute capability 3.x ~이상)
- bank는 서로 독립적이며, 서로 다른 bank는 동시 접근 가능
- Bank Conflict
- 하나의 bank에 여러 thread가 접근하는 경우 하나의 thread씩 처리할 수 있다.
- 즉, thread의 직렬화 발생! → 성능 저하
No Bank Conflict
CUDA를 사용할때 Bank Conflict를 조심해야 한다.
Example
이전글에서
row = threadIdx.x 일 경우 Bank Conflict 발생!
이를 해결해주기 위해 Global Memory에서 Shared Memory로 옮길때
Transpose를 해주면서 넘겨주면 해결이 됩니다.
출처:
https://www.youtube.com/watch?v=hyCEFNbumOo&list=PLBrGAFAIyf5pp3QNigbh2hRU5EUD0crgI&index=25
'Cuda' 카테고리의 다른 글
12_Global_Memory_Maximizing_CUDA (0) | 2021.09.07 |
---|---|
11_Using Shared Memory_Example_Quiz_2_CUDA (0) | 2021.09.02 |
10_Using Shared Memory_Example_Quiz_1_CUDA (0) | 2021.09.01 |
09_Memory_Active_Warp_CUDA (0) | 2021.09.01 |
08_Memory_Architecture_CUDA (0) | 2021.08.30 |