Trung bình
고성능 GPU 커널을 위한 메모리 액세스 병합 최적화
CUDA 환경에서 대규모 행렬 연산을 수행할 때, 글로벌 메모리 액세스 패턴을 최적화하여 메모리 대역폭 병목 현상을 해소하고 워프(Warp) 내의 메모리 트랜잭션 수를 최소화하는 방법을 분석하십시오.
📝 프롬프트 내용
NVIDIA GPU 아키텍처(예: Ampere 또는 Hopper)를 사용하여 희소 행렬-밀집 행렬 곱셈(SpMM) 연산을 최적화하려고 합니다. 현재 구현된 커널의 성능 프로파일링 결과, 글로벌 메모리 로드/스토어 명령어의 실행 시간이 전체 실행 시간의 70% 이상을 차지하는 것으로 확인되었습니다. 다음 사항을 고려하여 커널 코드를 최적화하는 전략을 제시하십시오.
1. **Coalesced Access 구현**: 불연속적인 메모리 주소를 갖는 희소 행렬의 원소에 접근할 때, 쓰레드 블록과 워프의 스레드 배치를 재조정하여 메모리 액세스를 병합(Coalescing)하는 방법을 설계하십시오.
2. **Shared Memory 활용**: 자주 참조되는 데이터를 Shared Memory에 로드하여 글로벌 메모리 접근 횟수를 줄이는 Tiling 기법을 적용하고, Shared Memory 뱅크 충돌(Bank Conflict)을 피하는 인덱싱 방식을 제시하십시오.
3. **벡터화된 메모리 로드**: `float4` 또는 `ldg` 명령어와 같은 벡터화된 로드 명령어를 사용하여 명령어 오버헤드를 줄이고 대역폭 효율을 극대화하는 방법을 비교 분석하십시오.