Category Archives: Research/Study

MKBlog 관리자 입니다.
개인적으로 관심이 있는 연구분야를 정리 할 계획입니다.
이상하거나 틀린 부분이 있으면 알려주시면 수정하도록 하겠습니다.
감사합니다.

[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 »

[GPU] Anti-Aliasing (AA) (SSAA vs. MSAA)

Graphic 공부를 하면 Anti-Aliasing (AA) 이란 단어를 Texture 다음으로 많이 듣게 된다. AA란 Object의 Edge를 부드럽게 하는 작업이다. 인터넷을 찾아보면 다양한 기법이 있지만 크게 2가지 방법이 제일 유명하다. 하나는 Super-Sampling Anti-Aliasing (SSAA)이고, 다른 하나는 Multi-Sample Anti-Aliasing (MSAA)이다. MSAA와 SSAA기법을 사용하여 만든 Image 결과는 큰 차이가 없다. 출처 6에 SSAA와 MSAA 기법을 사용하여 생성한 Image를 확인… Read More »

[GPU] Texture Filtering (Bilinear vs. Trilinear vs. Anisotropic)

Graphics 관련 공부를 하면서 계속 새로운 것을 알게되고 정리해야 할 내용이 너무 많아지고 있다. 솔직히 이제는 새로운 정보에 대해서 제대로 이해하는지 걱정이 된다. Graphics 연산에 Texture는 정말 필수 요소이다. Object (Triangle)의 색상을 결정하는 과정에 Texture 이미지를 사용하게 된다. 쉽게 설명하면 Cube 물체가 있다고 생각하고 색종이로 Cube 물체를 감싸게 되면 Cube는 색종이 색을 가진 Cube 처럼… Read More »

[GPU] Life of Triangle – NVIDIA’s Logical Pipeline

개인적으로 GPU 공부를 하면서 GPGPU의 개념만 이해했다. 실제로 GPU에서 Graphics (Graphics Pipeline) 연산을 어떻게 수행하는지 거의 알지 못한다. 운이 좋게 GPGPU 공부를 하고 실제로 GPU를 많이 사용하는 곳에서 일하게 되면서 GPU 공부를 계속할 수 있게 되었다. 공부하면서 NVIDIA에서 제공하는 “Life of a Triangle”이라는 기사를 읽고 너무 좋은 자료인 것 같아서 정리를 해보았다. 중간중간 모르는 부분도… 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 »