Monthly Archives: November 2016

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

[Pascal Architecture] Unified Memory

Unified memory는 프로그램을 제작하는 프로그래머 입장에서는 아주 중요한 부분이다. Unified memory가 지원하지 않을 경우 같은 데이터를 CPU와 GPU에 동시에 저장해야 하는 경우가 있다. 그리고 Sparse memory access (random data access로 인해서 load 한 모든 데이터를 사용하지 않는 경우를 의미함)의 경우 많은 data를 loading하고 오직 적은 수의 random access만 발생하여 성능이 느려질 수 있다. 2009년에 (Fermi… Read More »

[MPI + CUDA] An Introduction to CUDA-Aware MPI

Message Passing Interface (MPI) Message Passing Interface (MPI)는 distributed system에서 데이터 통신을 하기 위한 standard API이다. 주로 High Performance Computing (HPC) 시스템에서 사용된다. 현재 버전의 CUDA는 MPI와 호환이 가능하다고 한다.  MIP+CUDA를 사용하는 이유는 크게 아래와 같다. data size가 너무 커서 하나의 GPU로 실행이 불가능한 경우 (실행은 가능하나 시간이 오래 걸리는 경우) GPU를 사용하여 기존 MPI… Read More »

[Window 10 + Visual Studio 2013] CUDA 컴파일 (Compile)

Visual Studio 2013을 기준으로 CUDA 컴파일 하는 과정을 정리하였다. 영어 버전 Visual Studio 2013을 사용하는 관계로 영어 버전으로 설명을 작성하였다. 컴파일 하는 과정의 아래의5개 그림을 따라하면 된다. 컴파일 과정은 어렵지 않은데 항상 linux에서 nvcc를 사용하여서 컴파일하다 보니 Visual Studio가 익숙하지 않다. 그림 1: Build (빌드) 항목 그림 2: Configuration Manager 옵션 그림 3: Solution Configuration 및… Read More »

[Artificial Intelligence] Foundation of AI

AI는 많은 분야와 연관이 있고, 다양한 분야에서 AI와 연관된 질문들에 대한 대답을 찾고 있다고 한다. Philosophy (철학) Can formal rules be used to draw valid conclusions? How does the mind arise from a physical brain? Where does knowledge come from? How does knowledge lead to action? 위와 같은 질문들을 대답하기 위해 많은 철학자가 노력했다고 한다.… Read More »

[Window 10] 자동 시작 프로그램 설정

윈도우 10에서 자동 프로그램 관리하는 방법을 정리하였다. 기존의 윈도우에서는 시작프로그램 설정을 위해서는 윈도우 시작 버튼, 프로그램에 들어가면 쉽게 시작 프로그램 폴더를 찾을 수 있었다. 윈도우 10은 윈도우 시작 버튼에 들어가면 시작 프로그램 항목이 사라져서 설정하는 데 다소 어려움이 있었다. 뭐 그렇다고 어려워 진 것도 아니다. 내 컴퓨터에서 아래의 path로 이동하면 시작프로그램을 등록하고 지울 수 있다.… Read More »

[Artificial Intelligence] AI Definition

요즘  Artificial Intelligence (AI)에 관련된 책을 찾아서 조금씩 읽고 있다. 상당히 어려운 주제라 introduction을 넘어가지도 못하고 있다. 우선 오늘은 AI의 definition에 대해서 작성 하려 한다. 책에 따르면 다양한 AI의 definition이 존재한다고 한다. 아래는 4개의 AI definition을 정리하였다. Action Humanly (The Turing Test Approach): 영어 해석 그대로 “얼마나 사람에 가깝게 행동하는지”를 의미한다. Turing test를 통해 얼마나… Read More »

[Neural Network] Multi-Layered Perceptron

지난번에 perceptron에 대해서 간단하게 설명하였다. 하나의 perceptron으로 점을 분류하는 간단한 예제를 확인해 보았다. 하나의 perceptron으로는 linearly separable 한 점을 분류할 수 있다. 아래 그림 1과 같이 AND와 OR gate는 하나의 perceptron만 사용하여 간한하게 결과값을 찾을 수 있다.   그림 1: AND/OR gate 결과 (출처)    반면 그림 2와 같이 XOR의 경우 하나의 라인으로 답을 분류할… Read More »