[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

[GPU] The Bifrost Shader Core (Mobile GPU)

중요: 항상 그렇지만 이번 글을 특히 이해하지 못하는 부분이 많았다. Bifrost GPUs 그림 1: Bifrost GPU 구조 (출처 2) 글을 쓰는 현시점에 사용되고 있는 GPU Architecture이다. 2016년 Exynos 7872를 시작으로 최근 Kirin 980에도 사용되었다 (출처1). Mali-G30, Mali-G50, Mali-G70이 Bifrost를 사용한 GPU이다. 위 그림1은 Bifrost GPU Architecture이다. 기본적인 구조는 앞서 작성한 Midgard GPU와 거의 같다. 변경된 … Read more

[GPU] The Midgard Shader Core (ARM Mobile GPU)

Midgard GPUs ARM에서 최근에 만든 Bifrost GPU 이전 모델인 Midgard에 대해서 짧게 정리해보았다. Exynos 5250 (2012년 추정)에서 첫 세대 Midgard를 사용하였고, 마지막으로 3세대 Midgard가 Exynos 8890 (2016년 추정)에 생산되었다 (출처 1, 2). Midgard GPU는 Mali-T600, Mali-T700, Mali-T800 시리즈가 있다. Midgard GPU는 요즘 GPU의 기본인 Unified Shader Core를 사용한다. Unified Shader Core란 Vertex Shader 연산, Fragment Shader … Read more

[GPU] FlexRendering (Hybrid Deferred and Direct Rendering Mode)

며칠 전에 작성한 Tile-based Rendering을 공부하다가 Qualcomm Developer Guide에서 찾은 내용인데 Tile-based와 Immediate Mode Rendering을 자동으로 선택해주는 방법이 있는 것 같다. 해당 부분은 ARM Mali GPU에서는 지원하는지 모르겠다. Qualcomm (QTI) 의 경우 자동으로 Tile-based Rendering 또는 Immediate Mode Rendering을 선택하는 것 같다. 출처 1에 따르면 Tile-based Rendering을 Binned Rendering이라 표현하였고, Immediate Mode Rendering의 경우 Direct … Read more