Vulkan API Vorstellung und Erklärung

Vulkan wurde erstmals auf der Game Developers Conference (GDC) im Jahr 2015 durch die Kronos Group, einem Industriekonsortium, dem unter anderen AMD, Intel, NVIDIA, SGI, Apple, Microsoft, Google sowie Oracle angehören, vorgestellt und ist die aktuelle Version der OpenGL-Schnittstelle.

Die Programmierschnittstelle (API) Vulkan wurde zunächst als „Next Generation OpenGL“ oder „OpenGL Next“ bezeichnet, aber diese Bezeichnungen wurden mit der Ankündigung von Vulkan fallengelassen. Vulkan beruht zum Teil auf Komponenten der Mantle-API von AMD, die das Unternehmen an die Khronos Group spendete und damit den Grundstein für die Entwicklung der Vulkan-API legte.

Vulkan ist eine plattformübergreifende Schnittstelle, die zudem quelloffen ist und ihren Schwerpunkt auf Anwendungen im Bereich 2D- und 3D-Grafik legt, um durch hardwarenähere Programmierung mehr Leistung bei gleicher Hardware zu liefern. Im Gegensatz zu OpenGL und DirectX 11 bietet Vulkan, genau wie die Schnittstellen DirectX 12 von Microsoft und Metal von Apple, eine bessere Leistung und eine ausgeglichenere Nutzung von Prozessor und Grafikkarte.

Anders als OpenGL und DirectX 11 ist Vulkan eine Low-Level-API mit geringerem Abstraktionsgrad, die dadurch mehr Kontrolle und Feinschliff am Programmcode ermöglicht. Durch die Unterstützung von Parallelisierung kann mit Vulkan die Prozessor-Last reduziert und die Berechnungen besser auf die Kerne moderner Mehrkernprozessoren verteilt werden. Im Vergleich mit OpenGL sorgt Vulkan für eine Reduktion des API-Overheads, was eine reibungslosere Zusammenarbeit zwischen den Komponenten eines Computers bei Verwaltung von Anfragen und Daten bedeutet. Gerade bei Spielen zeigt sich dieses Leistungsplus durch höhere Bildraten auf dem Monitor. Vulkan gibt Softwareentwicklern mehr Kontrolle über die Leistung, Effizienz und Fähigkeiten moderner Grafikkarten und Mehrkernprozessoren.

Aus welchen Bestandteilen/Features setzt sich Vulkan zusammen?

Vulkan bietet Unterstützung für die ganze Palette an Grafikprozessoren. Die Bandbreite reicht dabei von Grafikeinheiten mobiler Geräte bis hin zu den High-End-Grafikkarten und ist für eine ganze Reihe von Betriebssystemen verfügbar. Neben Android läuft die Vulkan-API auch auf Linux, Solaris, FreeBSD, Windows 7, Windows 8 und Windows 10. Selbst im Ökosystem von Apple bieten iOS uns macOS Unterstützung für die Schnittstelle der Khronos Group.

Vulkan reduziert den Treiber-Overhead und die Auslastung des Prozessors gleichermaßen. Die Last der CPU wird durch die Verwendung von Batching verringert, was ihr mehr Rechenzeit für andere Aufgaben zur Verfügung stellt. Vulkan arbeitet durch Skalierung besser mit Mehrkernprozessoren zusammen und weis die einzelnen Kerne besser zu nutzen als DirectX 11 und OpenGL, die vor allem für Einkernprozessoren ausgelegt waren und dementsprechend schlecht mit Mehrkernprozessoren zusammenarbeiteten.

Die Vulkan-API verfügt über Unterstützung für SPIR-V (Standard Portable Intermediate Representation), die eine plattformübergreifende Zwischensprache für GLSL und OpenCL ist und bereits Shader im binären Format mitbringt. Die Möglichkeit Shader vorab zu kompilieren verringert die benötigte Rechenzeit und erlaubt es, eine größere Anzahl an Shadern zu benutzen. Die einheitliche Verwaltung von Compute-Kernel und Shadern in der Vulkan-API macht eine separate Compute-API in Verbindung mit einer Grafik-API überflüssig. Vulkan bietet eine objektbasierte Programmierung und fügt sämtliche State-Concepts zu einem lokalen Command-Buffer zusammen. Parallelisierte Programmierung ist ebenfalls erlaubt und bietet mehr Kontrolle beim Speichermanagement und der Synchronisation. Treiber fürVulkan prüfen nicht auf Laufzeitfehler, sondern bieten Entwicklern das Werkzeug der Validation-Layer zur Fehlerkontrolle.

Auf der Messe SIGGRAPH im Jahr 2016 kündigte die Khronos Group an, künftig mit Vulkan 1.1 mehrere Grafikkarten gleichzeitig direkt durch die Schnittstelle zu unterstützen. Dadurch fiel der Zwang, SLI oder Crossfire zu benutzen weg und es wurden auch keine Grafikkarten gleichen Modells benötigt. Stattdessen verteilt Vulkan die Last intelligent auf zwei oder mehr komplett verschiedene Grafikkarten. So können sich integrierte und dedizierte Grafikeinheit die Arbeit teilen und einen Leistungsschub erfahren.

Der 7. März 2018 sah die Veröffentlichung von Vulkan 1.1 und brachte als das erste große Update der Schnittstelle die Standardisierung verschiedener Erweiterungen und unter anderem Unterstützung für Raytracing mit sich.

Am 15. Januar 2020 folgte mit der Veröffentlichung von Vulkan 1.2 das zweite große Update, das 23 der am häufigsten gebrauchten Erweiterungen der Vulkan-Schnittstelle hinzufügte. Zu dem bedeutendsten zählen die Möglichkeit der Synchronisation der Speicheroperationen über mehrere Threads und die erneute Nutzung von Descriptor-Layouts durch mehrere Shader.

Vulkan 1.2 verbessert seine Flexibilität bezüglich der Implementierung anderer Grafikschnittstellen neben Vulkan ebenfalls. Bei der Veröffentlichung von OpenCL 2.2 verkündete die Khronos Group, in Zukunft OpenCL und Vulkan einander anzugleichen und so mehr Flexibilität bei der Softwareentwicklung bezüglich beider Schnittstellen zu haben.

Was sind die Vorteile/Unterschiede von Vulkan zu anderen APIs?

Vulkan bietet eine ganze Reihe von Vorteilen gegenüber anderen APIs und seinem Vorgänger OpenGL. Die Schnittstelle sorgt für weniger Overhead und erlaubt mehr Kontrolle über die Grafikkarte und verringert in Folge die Prozessorlast. Das generelle Konzept und der Funktionsumfang von Vulkan ähneln dem der Mantle-API von AMD, die ihr zugrunde liegt und später von Microsoft und Apple für ihre eigenen Schnittstellen DirectX 12 und Metal adoptiert wurde.

Ein weiterer großer Vorteil ist die Quelloffenheit der Vulkan-Schnittstelle. Ihr Einsatz ist damit nicht auf Produkte eines Herstellers beschränkt, sondern kann auf einer Vielzahl von Geräten erfolgen. Gegenwärtig findet Vulkan bereits auf unzähligen Geräten Anwendung, die Smartphones, Tablets, Laptops und Desktop-Computer einschließen und mit verschiedenen Betriebssystemen betrieben werden.

Treiber für die Vulkan-API benötigen ebenfalls weniger Verwaltungsaufwand durch die Entwickler, da lediglich für die Grafikkarten spezifische Optimierungen und Erzeugung von Code erforderlich ist. Das schlägt sich in auch in kleineren Dateigrößen des Treiberpakets nieder.

Keine andere Schnittstelle bietet diese leistungsfähige Kombination aus Kompatibilität, Funktionsumfang bei der Grafikberechnung und Effizienz bei der Zusammenarbeit mit Hardwarekomponenten.

Wo wird Vulkan eingesetzt?

An erster Stelle fungiert Vulkan als schnelle Grafikschnittstelle, deren Einsatz, im Gegensatz zu DirectX von Microsoft und Metal aus dem Hause Apple, nicht auf ein Betriebssystem beschränkt ist.

Mit AMD, NVIDIA und Intel liefern alle wichtigen Hersteller Hardware, die zu Vulkan kompatibel ist. AMD unterstützt mit ihren Grafikkarten seit der ersten GCN-Architektur Vulkan 1.0 und GCN der zweiten Generation brachte Unterstützung für Vulkan 1.1. NVIDIA unterstützt mit ihren Grafikkarten auf Basis von Kepler, Maxwell und Pascal ab Compute Capability 3 Vulkan 1.0 und 1.1. Intel bietet ab den Skylake-Prozessoren Unterstützung für Vulkan 1.0 und ab Kabylake für Vulkan 1.1.

Artikel vom 25.07.2020