kernel 에 임의 패딩을 포함 시키는 형태로 bank conflict 회피 하는 형태
__shared__ float sh[32][32];
int lane = threadIdx.x % 32;
// ...
float v = sh[lane][0];
/////////////////////////////
__shared__ float sh[32][33];
int lane = threadIdx.x % 32;
float v = sh[lane][0];
커널 시간을 측정하기 위한 ncu 명령어 사용
[conflict] kernel time: 34.195 ms // 이 값은 "프로파일링 오버헤드 포함" 시간
l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_ld.sum = 19,840
l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_st.sum = 19,840
...
warp_issue_stalled_* 관련 비율은 0%
/////////////////////////////////////////////////////////////////////////////////
[padded] kernel time: 31.299 ms // 역시 프로파일링 오버헤드 포함
l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_ld.sum = 0
l1tex__data_bank_conflicts_pipe_lsu_mem_shared_op_st.sum = 0
...
warp_issue_stalled_* 관련 비율은 0%
임의의 padding 통해 bank conflict 0 달성 성공
하지만 실행 시간 측면에서 거의 동일했음
테스트 환경 및 세팅 규모가 충분히 크지 않아 confllict 차이에 따른 실행 시간 차이를 관측할 수 없었음
'GPU-KERNEL' 카테고리의 다른 글
| Register Tiling TN Sweep test TN 이 증가하면, ILP (Instruction Level Parallelism) 증가 (0) | 2025.11.30 |
|---|---|
| 헐 lane 과 bank 가 다른 개념이었어, 숫자만 32로 동일한 것 - 여기서 swizzle 의 등장 (0) | 2025.11.30 |
| Fragment layouy visualize test (0) | 2025.11.30 |
| SMEM Tile Size Sweep test (0) | 2025.11.30 |
| Naive GEMM vs Shared Memory Tiling GEMM Test (0) | 2025.11.30 |