한국의 개발자들을 위한 Google for Developers 국문 블로그입니다.
Vulkan 개발자 도구를 이용한 최적화, 개발 및 디버깅
2016년 4월 11일 월요일
게시자: Shannon Woods, 기술 프로그램 관리자
오늘 여러분께
Vulkan™
용 Android 개발 도구의 프리뷰를 소개해 드리게 되어 매우 기쁩니다. Vulkan은 구글이 Khronos를 도와 함께 개발한 새로운 3D 렌더링 API입니다. Vulkan은 개발자 여러분이 더 낮은 오버헤드로 명시적으로 GPU(Graphics Processor Unit, 그래픽 처리 장치)를 컨트롤 할 수 있도록 지원합니다. 단일 코어 대상의 몇몇 종합 벤치마크에서 OpenGL ES에 비해 10배나 높은 그리기 호출 처리량을 확인할 수 있습니다. 또한, 멀티 코어를 병렬 사용할 수 있도록 해주는 스레딩 친화적인 API 디자인을 갖추고 있으며, 이를 통해 draw 호출이 잦은 애플리케이션의 성능을 현저히 끌어올릴 수 있습니다.
Vulkan은 현재 Nexus 5X, Nexus 6P 및 Nexus Player를 지원합니다. 각 디바이스의 Android N 프리뷰 이미지를 올리시면 Vulkan API를 이용할 수 있습니다. 또한 삼성 갤럭시 S7, 삼성 갤럭시 S7 엣지, NVIDIA SHIELD Android TV, NVIDIA SHIELD 태블릿 K1 등, Vulkan을 지원하는 Android M 기기에서도 Vulkan 애플리케이션을 빌드하여 실행할 수 있습니다. (물론, OpenGL ES도 계속 사용하실 수 있지요!)
개발자 여러분이 바로 코딩을 시작하실 수 있도록 샘플과 개발 가이드 문서가 제공되고 있습니다. [링크: 샘플 및 지침] 또한, Google의
Art, Copy, and Code
팀이 보여 주는 Robert Hodgin의 Fish Tornado 데모에서 Vulkan이 Android 기기에서 실제로 작동하는 모습을 볼 수 있습니다.
[동영상 추후 결정]
최적화: Vulkan API
OpenGL ES와 Vulkan은 많은 유사점을 가지고 있지만, Vulkan은 1밀리초라도 소중하게 사용해야 하는 개발자들을 위한 새로운 기능을 제공합니다.
애플리케이션의 메모리 할당 제어.
Vulkan은 GPU에 메모리를 할당하는 시점과 방법을 세세하게 제어할 수 있는 메커니즘을 제공합니다. 이를 통해 개발자들은 자신의 애플리케이션에 적합한 할당 및 재활용 정책을 사용할 수 있으므로, 궁극적으로 실행 및 메모리 오버헤드를 줄이고 비용이 많이 드는 할당이 발생하는 경우 애플리케이션이 이를 적절히 통제하도록 할 수 있습니다.
비동기식 명령 생성
. OpenGL ES에서는 애플리케이션이 그리기 호출을 실행하는 즉시 GPU에 호출이 전달됩니다. 그 대신, Vulkan에서는 애플리케이션이 명령 버퍼에 그리기 호출을 전달합니다. 이를 통해, 그리기 호출 생성 및 기록 작업과 그리기 호출을 GPU로 전달하는 동작이 분리되며, 여러 개의 스레드에 명령 생성을 분산함으로써, 애플리케이션은 더욱 효과적으로 다중 CPU 코어를 활용할 수 있습니다. 또한, 이들 명령 버퍼는 재사용할 수 있으므로 명령 작성 및 실행과 관련된 오버헤드가 감소합니다.
숨겨진 작업 없음.
OpenGL ES의 한 가지 문제점은 일부 명령이 API 사양에 명시되어 있지 않거나 개발자에게 분명히 제시되지 않은 시점에 작업이 시작될 수 있다는 것입니다. Vulkan은 어느 명령이 명시적으로 작업을 시작하고 어느 명령이 시작하지 않을 것인지 지정함으로써 더욱 예측 가능하고 일관성 있는 성능을 보장합니다.
철저한 멀티스레드 디자인
. 모든 OpenGL ES 애플리케이션은 예측 가능하고 정확하게 렌더링하기 위해 오직 단일 스레드의 컨텍스트에 대해서만 명령을 실행해야 합니다. 이와 대조적으로, Vulkan에는 이런 요구 사항이 없습니다. 하지만 그와 동시에 Vulkan은 여러 개의 스레드로부터 동시에 데이터를 수정 및 판독할 때의 안전성에 대해 묵시적 보증을 하지 않습니다. 스레드 동기화의 관리 권한과 책임은 애플리케이션에 주어집니다.
모바일 친화적 기능.
Vulkan에는 많은 모바일 기기에서 사용되고 있는 타일링 GPU에서 고성능을 내는데 특히 유용한 기능들이 포함되어 있습니다. 애플리케이션은 별개의 렌더링 패스 간 상호 작용에 대한 정보를 제공할 수 있으므로, 타일링 GPU가 한정된 메모리 대역폭을 효과적으로 사용하고 오프칩 읽기 수행을 피할 수 있게 해줍니다.
오프라인 셰이더 컴파일.
Vulkan은 셰이더용 중간 언어인 SPIR-V에 대한 지원을 위임합니다. 따라서 개발자들은 셰이더를 일찍 컴파일하여 SPIR-V 바이너리를 애플리케이션과 함께 출시할 수 있습니다. 이런 바이너리는 GLSL 같은 고급 언어보다 구문 분석이 더 단순합니다. 다시 말해, 드라이버가 이 구문 분석을 수행하는 방법에 변동이 적다는 뜻입니다. 또한, SPIR-V는 제3자가 전문화된 셰이더용 언어나 교차 플랫폼 셰이더용 언어를 위한 컴파일러를 제공할 수 있는 기회를 열어줍니다.
선택적 유효성 검사.
OpenGL ES는 호출하는 명령 하나하나를 검증하여 인수가 예상 범위 내에 있는지, 그리고 객체가 연산 수행에 올바른 상태인지 확인합니다. Vulkan 자체는 이런 유효성 검사를 수행하지 않습니다. 그 대신, 개발자들이 선택적으로 디버그 도구를 사용해서 호출이 정확한지 확인하여 최종 제품에서 런타임 오버헤드가 발생하지 않도록 할 수 있습니다.
디버깅: 유효성 검사 계층
위에서 언급했듯이, Vulkan에는 암시적 유효성 검사 기능이 없으므로 개발자가 API 외부 도구를 사용하여 코드의 유효성을 검사해야 합니다. Vulkan의 계층 메커니즘에서는 유효성 검사 코드와 기타 개발자 도구가 개발 중에 모든 API 호출을 검사할 수 있으므로, 출시 버전에는 어떤 오버헤드도 초래하지 않습니다. 당사의 가이드에서는 Android NDK와 함께 사용하기 위한 유효성 검사 계층 빌드 방법을 보여 주어, 처음부터 끝까지 버그 없는 Vulkan 코드를 빌드하는 데 필요한 도구를 제공합니다.
개발: 셰이더 툴체인
도구 모음인
Shaderc
는 개발자들에게 GLSL을 SPIR-V로 컴파일하기 위한 빌드 시간 도구와 런타임 도구를 제공합니다. 기존 빌드 시스템으로의 손쉬운 통합을 위해, 명령줄 컴파일러인 glslc를 사용해서 셰이더를 빌드 시간에 컴파일할 수 있습니다. 또는 실행 중에 생성되거나 편집되는 셰이더의 경우, 개발자는 Shaderc 라이브러리를 사용하여 C 인터페이스를 통해 GLSL 셰이더를 SPIR-V로 컴파일할 수 있습니다. 두 가지 도구 모두 Khronos의 참조 컴파일러를 기반으로 빌드된 것입니다.
추가 리소스
Vulkan 에코시스템은 워낙 광범위해, 시작하는 데 도움이 되는 리소스가 이것으로 끝이 아닙니다. 다음을 비롯하여 탐구해 볼 만한 수많은 자료가 있습니다.
개요, 참조 페이지, 사양 및 커뮤니티 데모를 포함한 Khronos의
Vulkan 리소스
Vulkan에 대한 [링크: Android 문서]
[링크: Android 샘플]
LunarG의
LunarXchange
에는 Windows 및 Linux Vulkan 개발을 위한 리소스가 있습니다.
여러분이 Android에서 이 Vulkan 프리뷰를 활용하여 무엇을 만들어낼지 몹시 기대됩니다!
Contents
ML/Tensorflow
Android
Flutter
Web/Chrome
Cloud
Google Play
Community
Game
Firebase
검색
Tag
인디게임페스티벌
정책 세미나
창구프로그램
AdMob
AI
Android
Android 12
Android 12L
Android 13
Android 14
Android Assistant
Android Auto
Android Games
Android Jetpack
Android Machine Learning
Android Privacy
Android Studio
Android TV
Android Wear
App Bundle
bootcamp
Business
Chrome
Cloud
Community
compose
Firebase
Flutter
Foldables
Game
gdg
GDSC
google
Google Developer Student Clubs
Google Play
Google Play Games
Interview
Jetpack
Jetpack Compose
kotlin
Large Screens
Library
ma
Material Design
Material You
ML/Tensorflow
mobile games
Now in Android
PC
Play Console
Policy
priva
wa
wear
Wearables
Web
Web/Chrome
Weeklyupdates
WorkManager
Archive
2024
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2023
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2022
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2021
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2020
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2019
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2018
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2017
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2016
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2015
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2014
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2013
12월
11월
10월
9월
8월
7월
6월
5월
4월
3월
2월
1월
2012
12월
11월
10월
9월
8월
7월
6월
5월
3월
2월
1월
2011
12월
11월
Feed