https://mkblog.co.kr/nvidia-gpu-memory-coalescing-coalesced-memory-access/
GPU에서 Coalesced 가 의미하는 바가 무엇인가
를 공부하다가 진짜진짜 잘 정리해둔 블로그가 있어서 링크 걸어놓는다.
진짜 단계별로 일목요연하게 너무 잘 정리되어 있어서 몇 번 읽어보니 이해하는 데에 도움이 되었다
32개의 memory request 가 연속적인 memory address를 가지고 있으며 하나의 cache line을 access하는 경우를 coalesced memory access 라고 한다. 그림 1은 coalesced memory access의 예제를 보여준다. 그림과 같이 warp 의 모든 thread가 하나의 cachline을 access하며 memory access address가 연속적인 것을 볼 수 있다. 이 경우 warp의 모든 thread의 memory instruction을 하나로 합쳐져서 memory request 가 생성된다. warp 는 한 번의 memory access만으로 32개의 thread의 메모리 request를 모두 처리할 수 있다
그림 2는 그림 1과 다르데 warp의 thread가 access하는 memory request가 하나의 cache line에 들어있지 않은 경우이다(하지만, memory access address는 연속적이다). address가 연속적이긴 하지만, 하나의 cache line에 들어가지 않기 때문에 하나의 warp는 2번의 cache access가 필요하다. 이 경우 하나의 cache line이 아니라 2개의 cache line을 access해야 한다. 결과적으로 하나의 memory instruction을 처리하기 위해서는 총 2번의 memory request를 생성해야 한다. 최소 2개의 cache line을 읽어보는 동안 warp는 실행할 수 없을 수도 있다. 또한, 더 많이 생성된 memory request 처리를 위해서 더 많은 memory bandwidth를 사용해야 한다.
그림 3은 memory address가 연속적이지는 않짐나 하나의 cache line에 모든 address가 들어가는 경우이다. CUDA computer 2.0 이하의 경우 1개 이상의 memory request가 발생한다. 하지만 CUDA compute 2.0 이상에서는 위와 같은 예제도 하나의 memory address로 합쳐져서 한 번의 memory access만 필요하다.
하나의 warp에서 여러번의 memory access가 발생하는 경우를 memory divergence라고 한다. 최악의 경우 하나의 memory instruction 처리를 위해서 총 32번의 memory request가 필요할 수도 있다. memory divergence를 최소화하고 CUDA 프로그램 성능을 높이기 위해서는 memory access pattern을 고려하여 CUDA 프로그램을 제작해야 한다~~
'2022-2 > 논문 아이디어' 카테고리의 다른 글
A Point-of-Interest Recommendation Method ExploitingSequential, Category and Geographical Influence (0) | 2022.08.30 |
---|---|
GSI: GPU-friendly Subgraph Isomorphism(2020) (0) | 2022.05.18 |
정적 질의 처리 (0) | 2022.04.05 |
Pregel: A System for Large-Scale Graph Processing 아이디어 논문 (0) | 2022.02.15 |
Pregel: A System for Large-Scale Graph Processing (0) | 2022.02.15 |