Category Archives: Research/Study

MKBlog 관리자 입니다.
개인적으로 관심이 있는 연구분야를 정리 할 계획입니다.
이상하거나 틀린 부분이 있으면 알려주시면 수정하도록 하겠습니다.
감사합니다.

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

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

[GPU] Occlusion Culling (Early-Z vs. Occlusion Queries)

What is Occlusion Culling? (출처 1) 간단히 설명하면 필요 없는 Geometry(지형, 물체 등)를 그리지 않도록 불필요한 연산을 제거하는 기술이다. 보통 모니터에 보이는 화면에 벗어난 물체 또는 다른 물체에 의해서 가려지는 물체(Occlusion) 등에 대한 연산을 수행하지 않게 하여서 Rendering 성능을 향상하는 방법을 의미한다. Occlusion Culling은 크게 “Occlusion Query”와 “Early-Z” 방법을 사용하여서 필요 없는 Rendering 연산을 제거한다.… Read More »

[Android] Systrace를 사용하여 SurfaceFlinger 동작 원리 확인하기

Android System Trace (Systrace (출처1))를 사용하여 GPU가 Rendering 한 결과 이미지를 SurfaceFlinger을 통해서 Display 되는 순서를 확인하는 방법에 대해서 정리하였다. Systrace를 사용하여 순서를 확인하기 전에 Android에서 Producer, Consumer, BufferQueue에 대한 이해가 필요하다. 솔직히 완전히 이해하진 못하지만, 간단히 이해한 내용을 정리하였다. 다음에 알게 되는 내용을 추가하거나,  또는 잘못된 내용을 찾게 되면 수정할 계획이다. 그림 1: Producer/Buffer… Read More »

[CPU/SoC] Build on ARM Cortex Technology License (Build on Cortex/BoC)

2016년 2월에 ARM은 새로운 “Build on ARM Cortex Technology (Build on Cortex/BoC)” License 모델을 공개하였다 (출처 1). 새로운 License 모델이 공개되기 전에는 크게 2가지 License 모델만 존재하였다. 그림 1은 기존 2가지 License 모델에 대한 설명이다 (출처 1). 그림 1: 기존 ARM 라이센스 (출처 1) 첫 번째 License는 ARM에서 제작한 Cortex CPU를 받아서 사용하는 것을 의미한다. 예를… Read More »

[CPU/SoC] Exynos 9820 (Samsung)

지난 11월에 삼성 LSI가 개발한 Exynos 9820을 공개하였다. Samsung 갤럭시 S10 국내 제품에 탑재되어 판매되고 있는 제품이기도 하다. 2017년도에 출시된 Exynos 9810의 경우 같은 해에 출시된 Snapdragon 845 대비 성능이 많이 떨어졌던 것으로 알려져 있다 (출처 1). 이번에 출시된 Exynos 9820은 기존 Exynos 9810 대비 성능, 배터리 효율 등이 모두 좋아진 것 같다. Snapdragon 855와… Read More »

[GPGPU Series 9] Memory Hierarchy on GPUs

GPU의 메모리 구조에 대해서 정리를 해보았다. 최근 GPU는 CPU와 비슷한 메모리 계층 구조를 가지고 있다.  GPGPU를 지원하는 초창기 GPU는 CPU와는 다소 다른 메모리 계층 구조를 가졌던 것으로 알려져 있다. 하지만 GPU를 General Purpose 연산 목적으로 많이 사용하면서 점차 CPU와 비슷한 메모리 계층 구조로 바뀌게 된 것 같다. 그림 1: CPU, GPU Memory 구조 (출처 1, 2)… Read More »

[Android/Linux] Big/Little Core 강제로 종료하기 (Disabling Big/Little Core)

요즘 출시되는 Android 핸드폰 (보드) 제품은 대부분 Big/Little CPU 구조를 가진다. Big/Little 코어 성능을 비교해 보고 싶어서 Core를 강제로 Disabling 하는 방법을 찾아서 정리해보았다 (출처 1). Android OS의 경우 Core를 강제로 종료하는 방법은 “/sys/devices/system/cpu/cpu/online”에 값을 0으로 변경해주면 된다. <N>은 CPU 번호를 의미한다. 보통 0~3번은 Little Core, 4~7번은 Big Core를 의미한다. File Path: /sys/devices/system/cpu/cpu<N>/online 추가로 chmod Command를… Read More »

[GPU] Multiple Render Targets (MRT)

그림1: Multiple Render Target 예제 그림 최근(?) GPU는 대부분 Multiple Render Targets (MRT) 기능을 지원한다. MRT 기능을 간단히 설명하면 한 번의 Fragment Shader 연산을 수행하여 여러 개의 Texture (Render Target Textures)을 생성하는 방법을 의미한다. 그림1은 MRT 기능을 사용하는 Shader 연산 순서도이다. MRT는 OpenGL 2.0과 Direct3D 9 부터 지원한다고 한다 (출처 1). 보통 MRT를 기능을 사용하여… Read More »

[GPGPU Series 8] Branch Divergence

GPU는 Thread를 32 또는 64개씩 묶어서 하나의 같은 Instruction을 수행한다. Branch Divergence는 Warp에 속한 Thread가 서로 다른 연산을 수행해야 하는 경우 발생한다. 예를 들어 Warp에 속한 짝수 ID를 가진 Thread는 IF 문에 해당하는 코드를 실행해야 하고, 홀수 ID를 가진 Thread는 ELSE에 해당하는 코드를 실행해야 하는 경우 Branch Divergence가 발생한다. 아래 코드는 Thread ID의 홀수 짝수 여부를 확인하여… Read More »

[GPU] Forward Rendering vs. Deferred Rendering

예전에 FlexRendering에서 Deferred Rendering에 대해 작성한 적이 있다. FlexRendering에서 사용하는 Deferred Rendering은 Tile-based Rendering을 의미하는 것 같다. 하지만, 보통 Graphic 연산에서 Deferred Rendering은 다른 의미로 더 많이 사용되는 것 같다. 이 글에서 Forward Rendering과 Deferring Rendering에 대해서 작성하였다. 이 글은 출처 1의 내용을 기반으로 작성하였다. Forward Rendering Forward Rendering은 OpenGL등을 처음 배우게 되면 사용하는 Graphic… Read More »