본문 바로가기

GPU-KERNEL

Coalescing / Shared Memory Bank Conflict / Warp Divergence 세 가지 개념 익히기 - 스레드 단위 병렬 성능 결정 요소들

coalescing / shared memory bank conflict / warp divergence
이 세 가지는 GPU에서 “스레드 단위 병렬 성능을 결정하는 3대 개념”이라고 봐도 될 정도로 서로 독립된 병목 요인

 

세 개념의 관계 정리

Global Memory Coalescing

  • warp 의 스레드들이 global memory 를 어떤 패턴으로 읽는가
  • 주소가 연속적이면 빠름 ( 1 트랜스 액션 )
  • stride / random 패턴이면 느림 ( 많은 트랜스 액션 )

즉, 전역 메모리 대역폭 효율 문제

 

Shared Memory Bank Conflict

  • warp 의 스레드들이 shared memory 의 32 개 bank 중 어디를 치는가
  • bank 충돌 없으면 빠름
  • 여러 스레드가 같은 bank 처리하면 순차 처리 - 느림

즉, 로컬 메모리 내부 구조 효율 문제

 

Warp Divergence

  • warp 내스레드들이 같은 실행 경로로 가는가
  • warp 내부 스레드가 같은 if branch - 정상 속도
  • warp 내부 스레드가 서로 다른 branch 순차 실행 느림

즉, 실행흘므 효율 문제

 

완전히 다른 개념이라 독립적으로 존재, 실제 고성능 CUDA 커널에서 이 세 가지를 모두 동시에 피하는 구조를 만들어야 한다.