[GPGPU Series 9] Memory Hierarchy on GPUs

GPU의 메모리 구조에 대해서 정리를 해보았다. 최근 GPU는 CPU와 비슷한 메모리 계층 구조를 가지고 있다.  GPGPU를 지원하는 초창기 GPU는 CPU와는 다소 다른 메모리 계층 구조를 가졌던 것으로 알려져 있다. 하지만 GPU를 General Purpose 연산 목적으로 많이 사용하면서 점차 CPU와 비슷한 메모리 계층 구조로 바뀌게 된 것 같다. 그림 1: CPU, GPU Memory 구조 (출처 1, 2) … Read more

[GPGPU Series 8] Branch Divergence

GPU는 Thread를 32 또는 64개씩 묶어서 하나의 같은 Instruction을 수행한다. Branch Divergence는 Warp에 속한 Thread가 서로 다른 연산을 수행해야 하는 경우 발생한다. 예를 들어 Warp에 속한 짝수 ID를 가진 Thread는 IF 문에 해당하는 코드를 실행해야 하고, 홀수 ID를 가진 Thread는 ELSE에 해당하는 코드를 실행해야 하는 경우 Branch Divergence가 발생한다. 아래 코드는 Thread ID의 홀수 짝수 여부를 확인하여 … Read more

[GPGPU Series 7] Warp Execution

지난 글에서 Thread Block (TB)에서 Warp를 생성하는 방법에 관해서 설명하였다. 이번 글에서는 Warp가 실행되는 방법(?)에 대한 설명이다. Warp는 GPU Instruction을 실행하는 가장 기본 단위이다. Warp의 모든 Thread는 하나의 같은 Instruction을 실행한다. 하지만, Warp의 각 Thread는 서로 다른 Data 값을 읽을 수 있다. 결과적으로 Warp의 각 Thread는 같은 Instruction을 다른 Data 값을 사용하여 연산을 수행한다고 생각하면 … Read more

[GPGPU Series 6] Thread Block to Warps

지난번 글에 Thread Block (TB) Scheduler가 TB를 Streaming Multiprocessor (SM)에 Scheduling하는 방법에 대해 설명했다. 간단히 다시 설명하면 TB는 Round-Robin방식으로 SM에 Scheduling 되고 총 Scheduling 가능한 TB의 개수는 크게 3가지 이유로 제한 된다. 이번글에서는 SM에 Scheduling된 TB를 Warp단위로 나누는 과정에 대해서 설명한다. Warp라는 개념은 GPU를 이해하는데 가장 중요한 부분이라고 생각한다. 앞 글에서 설명한 것과 같이 TB는 … Read more

[GPGPU Series 5] Scheduling Thread Blocks

GPGPU Series 4에서 Application, Kernel (Grid), Thread Block (TB or CTA), Thread에 대한 설명을 작성하였다. GPGPU Series 3에서는 대략적인 GPU 구조에 대한 설명을 하였다. 이번 글에서는 Kernel의 TB가 Streaming Multiprocessor (SM)에 Scheduling되는 방법에 대한 설명을 진행할 예정이다. 이전에 작성한 글에서 각 Application은 1개 이상의 Kernel로 구성되어 있고, 각 Kernel은 다시 1개 이상의 TB로 구성되어 있다고 설명하였다. … Read more

[GPGPU Series 4] GPGPU Application Thread Hierarchy

이번 글은 CUDA로 작성된 GPGPU Application의 Thread Hierarchy에 대한 설명을 정리하였다. GPGPU Application에서 Thread Hierarchy와 GPU Warp (Wavefront)의 개념을 이해하면 GPGPU의 개념의 절반 이상을 이해했다고 할 수 있다. 다시 말해서 Thread Hierarchy와 Warp 개념은 GPU에서 가장 중요한 부분이다. 보통 CUDA로 작성된 코드는 GPU에서 실행되는 함수와 CPU에서 실행되는 코드로 구분된다. CUDA로 작성된 코드 중 GPU에서 실행되는 … Read more

[GPGPU Series 3] GPU Architecture Overview

조금 고민을 하다가 GPGPU (CUDA) Application의 Thread Hierarchy에 대해서 작성하기 이전에 GPU Architecture에 대해 간단하게 설명을 먼저 작성하려 한다. 아주 간략한 용어들만 설명하는 단계이다. 부족한 부분은 뒤에 추가로 상세히 설명을 진행할 예정이다. 글에서 사용하는 GPU Architecture 용어는 NVIDIA White Paper에서 사용하는 것이다. 그림 1: GPU Architecture 앞글에서 짧게 설명했듯이 요즘 구매하는 GPU는 Fixed Function Unit과 Programmable … Read more

[GPGPU Series 2] General Purpose on GPUs

시작이 중요하다고 Index 다음으로 첫 글을 작성하였다. CUDA가 GPU에서 동작하는 순서를 알기 전에 General Purpose on GPU (GPGPU) 개념을 먼저 설명할 필요가 있다. GPGPU라는 개념이 생긴 이유는 개인적인 견해가 많이 들어간 부분이다. 2010년도 초반부터 공부했기 때문에 GPU 또는 GPGPU의 많은 과거사를 정확하게 알고 있지는 않다. 우선 가장 먼저 GPU의 긴 역사 중 중요한 몇 가지 … Read more

[GPGPU Series 1] Index of Articles

대학원을 다니면서 GPGPU-Sim을 사용하여 GPU에 대한 공부와 연구를 진행하였다. 그래서 GPU에 실행되도록 작성된 General Purpose on GPU (GPGPU) Application이 GPU에 어떻게 동작하는지 조금은 이해하고 있다. 항상 영어 사이트의 내용을 번역하는 수준으로 블로그 글을 쓰다가 우연히 OpenGL/Vulkan 등의 API로 작성된 Application이 GPU에서 실행되는 방법을 정리한 Article을 찾을 수 있었다. Article을 읽은 후 나도 한번은 아는 지식으로 … Read more