[GPU] Tile-based Rendering (Mobile GPU)

ARM Mail GPU는 Tile-based Rendering 기술을 지원한다. Tile-based Rendering이란 Framebuffer를 작은 단위로 나누어서 Rendering 작업을 수행하는 것이다. Mail GPU의 경우 16 x 16 Pixel단위로 나누어서 Rendering 연산을 수행한다. 출처 1은 Tile-based Rendering의 장점, 단점을 정리한 글이다. 출처1의 글을 읽고 짧게 정리해보았다. Immediate Mode GPUs 기존 PC GPU는 Immediate Mode Rendering을 지원한다. Immediate Mode Rendering 이란 Command … Read more

[GPU] Clipped vs. Culled

Rendering 연산을 하면서 불필요한 연산을 줄이는 2가지 (Clipped/Culled) 방법이 있어서 정리해보았다. 아래 2가지 방법 모두 불필요한 삼각형을 제거하거나, 크기를 조절하여 Rendering 연산량을 최소화하는 기술인 것 같다. Clipped 특정 물체의 전체가 화면에 표시되는 것이 아니라 특정 부분만 화면에 표시될 때 연산을 줄이는 방법을 의미하는 것 같다. 물체 전체가 Rendering 되지 않는 경우 특정 부분만을 작은 삼각형으로 … Read more

[GPU] 그래픽스 파이프라인 (Graphics Pipeline)

대부분 물체 (Mesh)는 3D 형태이지만 우리가 보는 모니터는 2D만을 디스플레이(표시) 할 수 있다. 그래서 OpenGL/Vulkan 등의 그래픽 파이프라인(Graphic Pipeline)은 3D 좌표를 모니터에 출력 가능한 2D 형태로 변경하는 작업이다. 출처 1에서는 Graphics Pipeline은 특정 물체 (Mesh)의 포인트 및 색감(Texture)등을 입력으로 받아서 픽셀(Pixel) 단위로 표시하는 작업의 순서라고 정의하였다. (The graphics pipeline is the sequence of operations that … Read more

[GPUs] Swap Chain

그림 1. A graphical depiction of a triple-buffered swap chain (출처 2) Swap Chain은 모니터에 Display 할 때 사용되는 Buffer (Framebuffer를 의미하는 듯)의 모음이라고 한다 (A swap chain is a collection of buffers that are used for displaying frames to the user). 여러 개의 Framebuffer가 있는데 이중 Display 되는 이미지 정보를 가지고 있는 Buffer를 Front Buffer라고 … Read more

[GPU] Double Buffering, Triple Buffering, and VSync

GPU (그래픽스)에서 설명하는 Buffer라는 단어는 GPU (컴퓨터)가 연산을 마무리하고 모니터에 Display되야 하는 데이터를 저장하는 공간을 의미한다. 예전에는 보통 1개의 Buffer를 사용하여 컴퓨터가 연산한 결과를 Buffer에 작성함과 동시에 모니터에 Display 하는 작업을 수행하였다. 1개의 Buffer를 사용하면 Flicker, Tearing과 같은 문제가 있어서 Double, Triple Buffers, VSync 기술을 사용하여 문제를 해결하였다. Buffering 예제 위키피디아 (출처1)에 Buffering에 대한 예제 … Read more

[NVIDIA GPU] Volta (GV 100) Introduction

그림 1: Volta GPU Concept 사진 2017년 Annual GPU Technology Conference에서 Volta GPU가 최초로 공개되었다. 2013년에 처음으로 NVIDIA에서 Volta GPU Architecture 이름을 공개하였다. 공개 당시 Maxwell 다음 Volta GPU architecture가 공개될 예정이었지만, 실제로는 Maxwell, Pascal, Volta 순서대로 GPU Architecture가 공개되었다. 현재 공개된 정보에 따르면 Volta GPU는 Highend Computing 특히 Machine Learning에 최적화된 제품인 듯하다. 그림 … Read more

[NVIDIA GPUs] PASCAL GPU SPEC 비교

NVIDIA Pascal GPU의 스펙이 궁금하여 정리를 해보았다. 그림 1: NVIDIA Pascal GPU 스펙 비교표 위 그림(표) 1은 현재 출시된 총 9개의 제품군의 간단한 스펙을 정리한 것이다. 높은 사양 제품일수록 CUDA core의 개수가 증가하였다. Clock speed의 경우 GTX 1050에서 GTX 1080까지는 증가하다가 다시 내려가는 경향을 확인할 수 있다. 아마 CUDA core의 개수가 많이 늘어 CUDA core … Read more

[NVIDIA GPU] Multi-GPUs CUDA 코딩 방법

과제로 CUDA 코딩을 연습하고 있는데 Multi-GPUs를 사용하는 코딩 방법이 크게 2가지 정도 있어 정리하였다. 아래 방법 이외 다른 게 있을 수도 있으나 공부하면서 이해한 방법은 크게 아래의 2가지 정도인 듯하다. Inter Process Communication (IPC)를 사용한 Multi-GPUs 사용 간단하게 설명하면 1개의 process가 1개의 GPU를 사용한다. 여러 개의 GPU를 사용하기 위해 여러 개의 process를 만들어야 한다. 그림 … Read more

[NVIDIA GPU] Pinned Host Memory (CUDA)

연구실에서 기업과제로 CUDA를 사용하여 병렬화 코딩을 진행하고 있다. Multi-GPUs 관련 코딩을 하면서 Pinned Host Memory라는 부분을 알게 되어 짧게 정리하였다. 다양한 최적화 기법을 시도해 보았다. 그 중 Pinned Host Memory를 사용하여 상당한 성능 향상을 얻을 수 있었다. 보통 Host (CPU)에서 메모리 allocation(할당)을 하면 Pageable Memory이다. Pageable Memory의 경우 GPU 메모리로 바로 복사가 불가능하다고 한다. 우선 … Read more

[NVIDIA GPU] Mixed Precision Programming

Pascal GPU (and CUDA 8)에서 16bit FP (Floating Point)와 8/16bit INT (Integer) 연산이 가능해졌다. 많은 HPC (High-Performance Computing) 애플리케이션은 높은 정밀도 연산이 필요해서 32bit (FP32 or Single Float) 또는 64bit (FP64 or Double Float) FP연산을 사용한다. 제한적인 애플리케이션에서는 128bit 또는 256bit FP 연산을 사용하기도 한다. 하지만, 최근 쟁점이 되는 Machine Learning (Deep Neural Network) 연산의 … Read more