PapaGo - A graphics API built on top of Vulkan, developed with a focus on programmability
Authors
Brandborg, Alexander ; Wiingreen, Claus Worm ; Munkgaard, Anders ; Dolatko, Michael Wit
Term
4. term
Education
Publication year
2018
Submitted on
2018-06-08
Abstract
Vulkan, udgivet i 2016 af Khronos Group, blev udviklet til at accelerere grafiske programmer, der er begrænset af CPU'en. Fordi Vulkan er et lav-niveau API, tættere på hardwaren og med mere manuel opsætning, kan det være vanskeligere at bruge end tidligere API'er. Vi præsenterer \api{}-API'et, som hæver abstraktionsniveauet, mens Vulkan bruges som backend. Målet er en OpenGL-lignende programmeringsstil, men med bevarelse af Vulkans tilstandsløshed (ingen skjult tilstand mellem kald), eksplicit styring af ressourcer og kommandobuffere, der kan optages parallelt. For at vurdere brugbarheden udviklede vi en opgavebaseret evalueringsmetode inspireret af Discount Evaluation og gennemførte brugertests. Deltagere med OpenGL-vaner tilpassede sig hurtigt til \api{}. Vi målte også ydeevnen med en testapplikation på to systemer: et med en AMD Sapphire Radeon R9 280 GPU og et med en NVIDIA GeForce GTX 1060. Når CPU'en var flaskehalsen (CPU-begrænset), gav parallel optagelse af kommandobuffere hastighedsgevinster på begge systemer, og de kørte omtrent lige hurtigt med en forskel på ca. 5 millisekunder. Når GPU'en var flaskehalsen (GPU-begrænset), havde parallel optagelse ringe effekt, og applikationen kørte omkring tre gange hurtigere på NVIDIA-systemet. Sammenlignet med den samme applikation skrevet i ren Vulkan tilføjer \api{} noget overhead. I CPU-begrænsede tilfælde kørte Vulkan mange gange hurtigere på begge systemer. I GPU-begrænsede tilfælde matchede \api{} Vulkan på NVIDIA-systemet, men var cirka en tredjedel langsommere end Vulkan på AMD-systemet.
Released in 2016 by the Khronos Group, Vulkan was designed to speed up graphics programs that are limited by the CPU. Because Vulkan is a low-level API—closer to the hardware and requiring more manual setup—it can be harder to use than earlier APIs. We introduce the \api{} API, which raises the level of abstraction while using Vulkan underneath. Our goal is an OpenGL-like programming style that still keeps Vulkan’s stateless design (no hidden state between calls), explicit resource management, and command buffers that can be recorded in parallel. To evaluate usability, we developed a task-based method inspired by Discount Evaluation and ran user tests. Participants accustomed to OpenGL-style programming adapted to \api{} quickly. We also measured performance with a test application on two systems: one with an AMD Sapphire Radeon R9 280 GPU and one with an NVIDIA GeForce GTX 1060. When the CPU was the bottleneck (CPU-bound), recording command buffers in parallel sped up both systems, and they ran at roughly the same speed, within about 5 milliseconds. When the GPU was the bottleneck (GPU-bound), parallel recording had little effect, and the application ran about three times faster on the NVIDIA system. Compared with the same application written in pure Vulkan, \api{} adds some overhead. In CPU-bound cases, Vulkan ran many times faster on both systems. In GPU-bound cases, \api{} matched Vulkan on the NVIDIA system but was about one-third slower than Vulkan on the AMD system.
[This abstract was generated with the help of AI]
Keywords
Vulkan ; Grafik ; Programmering ; Brugbarhed ; PapaGo
Documents
