Category Archives: Series

[Vulkan Tutorial] 03-Development Environment

목차: 01-Overview (Link)이전 글: 02-Vulkan Overview (Link)다음 글: 04-Create Sub-Module and Base Code (Link) [Android] Vulkan Development Environment Android SDK/NDK를 다운받아서 Vulkan Example을 빌드하는 방법에 대해서 정리하였다. 해당 설정 방법은 Ubuntu Linux, Window, Mac에서 모두 테스트해 보았고 정상적으로 빌드되는 것까지 확인하였다. 이 글의 내용은 출처 2에 있는 내용을 기준으로 작성하였다. 먼저 Android Studio를 다운받아서 설치한다.… Read More »

[Vulkan Tutorial] 02-Vulkan Overview

목차: 01-Overview (Link)이전 글: 01-Overview (Link)다음 글: 03- Development Environment (Link) Origin of Vulkan  Vulkan은 기존에 개발된 그래픽(Graphics) API와 동일하게 여러 Platform(Window, Mac, Linux, Android, 등)에서 사용 가능하다. Vulkan은 기존에 개발된 그래픽 API의 문제점을 해결하기 위해서 만들어졌다고 한다. 기존 그래픽 API의 문제점 (예: OpenGL) 기존에 개발된 그래픽 API는 Fixed-Function(고정 연산)을 지원하는 GPU가 있던 시기에 만들어졌다. 기존 그래픽… Read More »

[Vulkan Tutorial] 01-Overview

목차: [Series 01] Overview (Link)다음 글: [Series 02] Vulkan Overview (Link) Vulkan Tutorial 공부를 하면서 작성한 코드와 읽은 내용을 정리할 계획이다. 이번 글 역시 대부분 출처 1 Vulkan Tutorial 내용을 기반으로 작성할 계획이다. 출처 1 Vulkan Tutorial 내용이 주기적으로 업데이트가 되는 것 같다. 이번 글의 경우 2018년 8월 (August, 2018)에 공유된 Vulkan Tutorial 내용을 기반으로… Read More »

[CUDA RT Series 8] Metal

목차: Series 1 – Index + Methodology (Link)이전 글: Series 7 – Iteration vs. Recursion (Link)다음 글: Series 9 – Dielectrics + Snell’s Law (Link) 출처 1에서 출처 2의 Chapter 8 내용부터는 추가적인 설명 없이 코드만 공유하고 있다. Chapter 8부터는 앞에 설명한 내용을 기반으로 CUDA 코드를 작성하면 된다고 한다. 그래서 Series 8부터는 변경된 코드 부분과 성능에 대해서만 간단히 작성할 계획이다.… Read More »

[CUDA RT Series 7] Iteration vs. Recursion

목차: Series 1 – Index + Methodology (Link)이전 글: Series 6 – It’s All Random (Link)다음 글: Series 8 – Rest of the Chapters (Link) Diffuse Material을 계산하기 위해서 작성한 CPU Color Function(함수)는 Recursive Function(재귀 함수)을 사용한다. 해당 코드를 CUDA로 변경하면 Stack Overflow가 발생할 확률이 매우 높다. 출처 3에 따르면 CUDA의 경우 최대 24번의 Recursive Function 호출이 가능하다고 한다. Diffuse Material… Read More »

[CUDA RT Series 6] It’s All Random

목차: Series 1 – Index + Methodology (Link)이전 글: Series 5 – Manage Your Memory (Link)다음 글: Series 7 – Iteration vs. Recursion (Link) 이번 글에서는 Anti-Aliasing(AA)를 구현한다. AA를 구현하기 위해서 Random 함수를 사용한다. CUDA는 cuRAND 라이브러리를 사용해서 Random 수를 생성한다. cuRAND는 CUDA Random Number Generation 라이브러리이다. cuRAND 라이브러리를 사용하여 AA를 구현하기 이전에 먼저 Camera Class를 먼저 생성한다. 아래 코드 1은… Read More »

[CUDA RT Series 5] Manage Your Memory

목차: Series 1 – Index + Methodology (Link)이전 글: Series 4 – Classing Up the GPU (Link)다음 글: Series 6 – It’s All Random (Link) 이번 장에서는 여러 개의 Sphere(구) 정보를 GPU 메모리에 저장하고 해당 정보를 활용해서 Sphere를 Rendering 할 예정이다. 이러한 과정에서 GPU 메모리를 관리하는 방법에 관해서 설명한다. 먼저 기존에 CPU에서 작성한 hitable, hitablelist, sphere Class를 GPU가 사용할 수… Read More »

[CUDA RT Series 4] Classing Up the GPU (Single vs. Double Precision)

목차: Series 1 – Index + Methodology (Link) 이전 글: Series 3 – Adding Vectors (Link) 다음 글: Series 5 – Manage Your Memory (Link) 이번에는 GPU가 사용할 Class를 생성한다. GPU에서 연산할 Class는 기존 CPU 코드와 동일하게 작성한다. Series 3 (Adding Vecotrs)에서 작성한 것과 같이 GPU에서 호출할 함수 앞에 “__device__”를 추가하면 된다.  아래 코드 1은 GPU에서 호출할 수 있도록 작성한… Read More »

[CUDA RT Series 3] Adding Vectors

목차: Series 1 – Index + Methodology (Link) 이전 글: Series 2 –First Image (Link) 다음 글: Series 4 –Classing Up the GPU (Link) 이번 장에서는 “__global__”, “__host__”, “__device__” 사용에 관해서 설명한다. 앞에서 작성한 코드 중 GPU에서 실행될 Function에 “__global__”을 함수 이름 앞에 작성하였다. “__global__”의 경우 GPU에서 실행할 함수를 의미한다. 보통 CPU에서 처음 호출할 함수 앞에 작성한다. “__global__”로 작성된 함수를… Read More »

[CUDA RT Series 2] First Image

목차: Series 1 – Index + Methodology (Link) 이전 글: Series 1 – Index + Methodology (Link) 다음 글: Series 3 – Adding Vector (Link) 출처 1에서 가장 처음 그리는 이미지는 초록색/빨간색/파란색을 적당히 혼합한 이미지이다. 아래 그림 1은 우리가 그릴 이미지이다. 우리가 그리게 될 이미지는 크기는 1200 x 600 이다. 기존 CPU 코드는 For Loop을 여러 번(Nested For Loops) 사용해서… Read More »