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

[GPU] Coordinate System (좌표 변환 순서)

Graphic API를 사용해서 이미지를 Rendering 하면 여러 연산 과정을 거치게 된다. 그중 Vertex Shader 연산은 물체(Object)의 좌표값을 계산하는 작업을 수행한다. 좌표 계산을 위해서 여러 번의 Transform(변환) 연산을 수행한다. 이번 글에서는 좌표의 변환 순서에 대해서 정리할 예정이다. MK: 예전에는 Vertex 연산 과정에서 Light 등을 고려해서 색상을 결정하는 연산도 같이 수행하였다고 한다. 그래서 Vertex Shader 라는 이름이… Read More »

[Linux] (Ubuntu) 윈도우 공유 폴더 Mount 하기

윈도우 공유 폴더를 Ubuntu Linux에 Mount해서 사용할 경우 아래와 같이 작업을 수행하면 된다. 먼저 아래 CMD를 실행해서 cifs-utils을 설치한다.  $sudo apt-get install cifs-utils 다음으로 아래 CMD를 사용해서 윈도우 공유 폴더(192.168.0.1의 D 드라이브를 의미)를 Linux의 “/home/mkblog/database/”에 마운트하게 된다. 앞에 작성한 PATH는 단순한 예제이다. 원하는 위치에 Mount를 하면 된다. $sudo mount -t cifs -o uid=mkblog,gid=mkblog,username=ID,password=PASSWORD //192.168.0.1/e /home/mkblog/database/ 위 CMD에서… Read More »

[Linux] SELinux: Enforcing vs. Permissive Modes

SELinux는 미국 국가안보국(NSA – National Security Agency)이 개발한 Flask 라는 보안 커널을 리눅스에 이식한 커널 레벨의 보안 모듈이다. NSA는 리눅스에 강제 접근 통제를 구현하기 위해 리눅스 커널의 많은 부분을 수정했으며 그 결과물을 리눅스 커뮤니티에 기증하여 2003년부터 2.6 버전의 커널에 공식 포함되게 되었다 (출처 1).  SELinux를 Enabled 또는 Disabled로 설정할 수 있다. Disabled된 경우 DAC (Discretionary… 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 »

[Linux] Converting Video (MP4) File to Image (Frames) Files (동영상 파일을 프레임 단위로 변환)

동영상 파일(MP4)을 구성하고 있는 모든 Frame을 이미지 형식으로 변경하는 방법에 대해서 정리해 보았다. Ubuntu 18.04에서 아래 CMD를 실행하면 영상의 모든 Frame을 이미지 파일(jpg)로 변환해준다. $ ffmpeg -i SampleVideo.mp4 SampleVideoFrame%04d.jpg -hide_banner -i : -i 옵션 다음에는 Input Video 파일 이름을 작성한다. SampleVideoFrame%04d.jpg: Output Image 파일 이름을 작성한다. 파일 이름 뒤에 있는 %04d 는 4자리 숫자를 사용하여… 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 »

[Linux] “TOP” 명령어 설명

리눅스를 사용하다 보면 “Top” 명령어를 자주 사용하게 된다. 해당 명령어를 사용하면 현재 실행 중인 프로세스의 정보를 확인할 수 있다. 다양한 정보가 출력되는데 정확한 의미를 몰라서 정리해보았다. 우선 개인적으로 필요한 부분만 정리하였다. 더 필요한 정보가 있는 경우 추가로 정리할 예정이다   “Top” 명령어 (출처 1) 처음 실행 시 $top -b: 모든 정보를 한번에 출력함 $top -n… 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 »