🧩 Q1. bank id 계산
Warp thread 0~31이 shared memory에서 다음 index를 읽는다:
idx = tid * 4
bank = ?
❓ Q1-1. 각 tid가 접근하는 bank 번호를 0~31까지 적어라.
❓ Q1-2. conflict는 몇-way인가?
🧩 Q2. stride=8 bank mapping
다음 index 패턴이 있다고 하자:
idx = tid * 8
❓ Q2-1. bank = (tid * 8) % 32 일 때,
bank 값은 어떤 패턴으로 반복되는가?
(0, 8, 16, 24, 0, 8, 16, 24, … 이런 식으로 적으라는 뜻)
❓ Q2-2. 한 bank 당 몇 thread가 몰리는가?
❓ Q2-3. conflict는 몇-way인가?
🧩 Q3. 최악의 stride 구하기
Warp가 최악의 32-way bank conflict를 만드는 stride는 무엇인가?
❓ Q3. stride = ?
(“tid 0~31 모두 bank 0으로 가도록 하는 stride”를 구하라)
🧩 Q4. padding이 해결하는 이유
다음 shared memory 선언과 접근을 사용한다고 하자:
__shared__ float sh[32 * 33];
idx = tid * 33
bank = (idx % 32)
❓ Q4-1. tid=0~31이 각각 어떤 bank로 매핑되는가?
❓ Q4-2. conflict가 사라지는 이유를 한 줄로 설명하라.
🧩 Q5. 실험 결과 해석 (너의 출력 기반 문제)
너의 실행 결과는:
stride=1 → 6.23 ms
stride=2 → 6.24 ms
stride=4 → 9.64 ms
stride=8 → 17.15 ms
stride=16 → 29.85 ms
stride=32 → 57.92 ms
❓ Q5-1. 왜 stride=2는 stride=1과 거의 같았는가?
❓ Q5-2. 왜 stride=32는 가장 느렸는가?
❓ Q5-3. 왜 stride=8 → stride=16 → stride=32 로 갈수록 거의 “2배 가까이” 증가하는가?
'GPU-KERNEL' 카테고리의 다른 글
| Warp Divergence QUIZ - 추가로 조건이 스레드 단위가 아닌 블록 단위면 괜찮은 이유에 대해 (0) | 2025.11.18 |
|---|---|
| Coalescing / Shared Memory Bank Conflict / Warp Divergence 세 가지 개념 익히기 - 스레드 단위 병렬 성능 결정 요소들 (0) | 2025.11.18 |
| Shared memory bank ( warp 와 bank 의 갯수는 하드웨어-레벨에서 설계적으로 32개로 맞춘 것 ) (0) | 2025.11.17 |
| 중요!!! 트랜스액션 ( 트랜잭션 ) 기준 확인 완료? warp - segment - transaction (0) | 2025.11.17 |
| 128B 트랜잭션의 개념 잡기, (0) | 2025.11.17 |