[Linux] AutoComplPop (Vim 자동 완성)

연구실 생활을 하면서 vim (text editor)을 꽤 오랜 시간 사용했다. Ctags등 다양한 프로그램을 vim과 함께 사용했는데 며칠 전 vim에서 키워드를 자동완성을 도와주는 AutoComplPop 프로그램을 찾아서 간단하게 설치 방법을 정리하였다. (Ubuntu 14.04 기준입니다) AutoComplPop은 아래 출처의 주소를 따라가면 다운 받을 수 있다. 또는 google에 AutoComplPop을 검색하면 아마 쉽게 다운 받을 수 있을 것이다. 그림 1: vim-autocomplpop … 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

Goodbye 2016 Welcome 2017

MKBlog 관리자입니다. 요즘 너무 바빠서 새롭게 올라오는 글이 없네요. 2017년에는 더욱 많은 글을 정리해서 올려보도록 하겠습니다. 늦었지만 2017년 새해 복 많이 받으시고 많은 방문 부탁드립니다. 감사합니다.   출처 http://sophisticate244.tistory.com/321

[Article] Review and Comparative Study of Ray Traversal Algorithms on A Modern GPU Architecture

본 논문은 WSCG 2014 (홈페이지)에서 공개된 논문이다. 현재 진행하고 있는 과제와 관련되어서 읽고 정리하였다. Motivation Ray tracing은 light(빛) 또는 wave(전파)의 진행방향을 파악하는 기술이다. Ray tracing은 보통 screen에 object를 출력 할 때 많이 사용된다. 빛의 시작점 (보통 태양) 등에서 light (ray)가 진행되는 방향을 파악하고 현재 보이는 screen에 총 도달하는 ray의 개수를 파악하여 밝기와 색상을 결정하는 방법이 … Read more

[Article] Zorua: A Holistic Approach to Resource Virtualization in GPUs (Micro 2016)

Zorua는 2016년 MICRO (홈페이지)에 발표된 논문이다. 논문을 읽고 내용을 정리해 보았다. Motivation Thread Block (Cooperative Thread Array, CTA)는 thread의 묶음을 의미한다. 하나의 thread block은 보통 수십 또는 수백 개의 thread를 포함한다. Thread block은 GPU의 SM에 스케줄링 되는 최소단위이다. 한 SM에 총 실행 가능한 thread block의 개수는 크게 아래의 3가지 이유로 결정된다. Thread의 register 사용량 (SM의 … Read more

[NVIDIA GPU] Memory Coalescing이란? (Coalesced Memory Access)

지난번에 GPU의 메모리 종류에 대해서 정리를 하였다. Memory Coalescing에 대해서 작성을 하려고 하였으나 모르는 부분이 많아서 먼저 메모리 구조를 알아보았다. CUDA 코딩을 할 때 가장 중요한 부분이 memory coalescing이다. 실제로 성능에 큰 차이가 발생한다. 간단한 vector (x, y, z)를 access 하는 코드를 만들어서 성능 차이를 비교해보았는데 memory coalescing을 고려한 코드와 그렇지 않은 코드의 성능 차이가 … Read more

[Pascal Architecture] Compute Preemption (Pixel Level Preemption)

Pascal architecture부터는 instruction level execution preemption이 가능하다고 한다. 실제 이 기능은 상당히 만족스럽다. 기존 Kepler, Maxwell GPU를 사용할 때 CUDA 프로그램과 그래픽 연산을 동시에 사용하면 화면이 검은색으로 변하면서 CUDA 프로그램이 완료될 때 까지 아무것도 할 수 없는 상태로 변한다. 하지만 Pascal architecture부터는 2개를 동시에 사용해서 화면이 꺼지거나 하는 현상이 없어졌다. 그 이유가 instruction level execution … Read more

[NVIDIA GPU] Memory 종류

연구실 과제로 기존 C 코드로 구현된 프로그램을 CUDA를 사용하여 병렬화 작업 중이다. CUDA 코딩을 하다 보니 성능을 최적화하기 위해 고려해야 할 부분이 너무 많다는 것을 알게 되었다. 예를 들어 branch divergence, memory coalescing, shared memory 사용, 등의 문제가 대표적으로 고려해야 할 부분이다. 많은 다양한 부분을 고쳐 보았다. 그중 memory coalescing에 대한 부분을 수정한 후 가장 … Read more

[Interconnection] PCIe 성능

PCI Express (Peripheral Component Interconnect Express) 또는 PCIe는 point-to-point interconnection architecture이다. PCIe는 기존 PCI/PCI-X bus를 대체하기 위해 제안되었다. 컴퓨터 조립할때 GPU, SSD 등을 PCIe를 사용하여 CPU, host mempry등과 연결한다. 그림1은 PCIe, CPU, Memory가 root complex를 사용하여 연결한 그림이다. 그림 1: Root complex를 사용하여 PCIe, CPU, Memory가 연결된 그림 기존 PCI는 shared parallel bus architecture를 사용하였다고 … Read more