© Den Rise/Shutterstock.com
Das erste Problem, dem sich jeder Neuling in der Grafik-API-Welt stellen muss, ist die Wahl der richtigen API. Wenn es um Open-Source-APIs für mehrere Plattformen geht, sind OpenGL und Vulkan die Hauptüberlegungen.
Worin unterscheiden sie sich und für welche lohnt es sich zu entscheiden? Dieser Artikel beantwortet diese Fragen mit einer eingehenden Analyse der Unterschiede zwischen den beiden APIs.
OpenGL vs. Vulkan: Ein direkter Vergleich
OpenGL vs. Vulkan: Was ist der Unterschied?
Definition
OpenGL
Silicon Graphics veröffentlicht die Open Graphics Library, OpenGL, im Juni 1992 als Open-Source-API zur Bereitstellung einer Schnittstelle für die Grafikprogrammierung. Im Laufe der Jahre wurde es durch Verbesserungen und die Einführung anderer Erweiterungen zu einer sprachübergreifenden API entwickelt.
Der Wendepunkt war die Einführung der Version 4.2-Erweiterung, die die Verwendung von Compute-Shadern ermöglichte, wodurch Thread-Synchronisation und gemeinsame Speichernutzung möglich wurden. Es verwandelte OpenGL in das, was es heute ist, eine API für das hardwarebeschleunigte Rendern von 2D-und 3D-Vektorgrafiken.
Vulkan
Die Khronos Group, AMD und DICE veröffentlichten Vulkan in 2016 als plattformübergreifende Open-Source-API, die eine Schnittstelle zum Programmieren und Rendern von Videospielen und anderen Echtzeit-3D-Grafikanwendungen bietet. Es sollte eine moderne Version von OpenGL sein, die den sich schnell ändernden Anforderungen der Spielebranche gerecht wird und gleichzeitig die volle Leistungsfähigkeit moderner GPUs ausschöpft. Es war ursprünglich als OpenGL der nächsten Generation bekannt, bevor es in Vulkan umbenannt wurde.
Vulkan ist eine Open-Source-API zum Programmieren von Videospielen und 3D-Grafikanwendungen.
©monticello/Shutterstock.com
Design
Das Das Design von OpenGL machte es für Grafik-Workstations geeignet, die direkte Renderings haben. Infolgedessen könnte es unabhängig vom Betriebssystem nicht für Desktop-Plattformen geeignet sein. Das Threading-Modell verhindert die parallele Befehlsgenerierung und-ausführung. Folglich konnte es auf bestimmten Plattformen wie Tablets, Smartphones und Konsolen nicht ausgeführt werden.
Im Gegensatz zu OpenGL und anderen APIs davor ist Vulkan in erster Linie für die Ausführung auf verschiedenen Plattformen konzipiert, insbesondere auf Mobilgeräten und Konsolen. Sein mehrschichtiges Design ermöglicht Codevalidierung, Profilerstellung und Debugging, ohne die Leistung zu beeinträchtigen; Daher kann es die innovative Nutzung von herstellerübergreifenden GPU-Tools aufrechterhalten.
Aufgrund seines mehrschichtigen Designs bietet Vulkan eine direkte Steuerung der GPU, eine Fähigkeit, die die meisten anspruchsvollen Spiele-Engines erfordern. Es stützt sich auch auf Befehlspuffer, bei denen es sich um vorgenerierte Befehle handelt, wodurch die Notwendigkeit entfällt, während jeder Renderschleife zu kompilieren oder zu validieren. Dadurch wird der CPU-Overhead erheblich reduziert.
CPU-Auslastung
In OpenGL werden ausgeführte Aufrufe nicht zwischengespeichert; Daher sind viele Aufrufe des Kernelmodus erforderlich, um den Zustand des Treibers zu ändern und zu validieren. Andererseits verwendet Vulkan Befehlspuffer und verbessert so die Nutzung der CPU-Ressourcen.
Der zweite Unterschied ist die parallele Puffergenerierungsfunktion von Vulkan. Damit nutzt Vulkan die Leistung aller CPU-Kerne, womit OpenGL zu kämpfen hatte, da es zu einer Zeit entwickelt wurde, als Mehrkernprozessoren noch unbekannt waren. Bei modernen Prozessoren mit mindestens acht Kernen ist Vulkan die einzige API, die die Möglichkeiten, die sie bieten, angemessen nutzen kann.
Shader-Compiler
Compute-Shader helfen, das Beste aus den GPUs herauszuholen (Graphic Processing Unit) Leistung, anstatt nur von der Leistung der CPU des Systems abhängig zu sein. Diese APIs verwalten diese Shader jedoch unterschiedlich.
OpenGL verwendet C++, eine Hochsprache, mit einem GLSL-Compiler. Der Compiler läuft auf Treiberebene und schreibt die Shader, die dann von der Laufzeitumgebung der Anwendung in Maschinencode für die GPU übersetzt werden.
Vulkan verkürzt den Prozess jedoch mit einer standardmäßigen portablen Zwischendarstellung, SPIR-v. Es verfügt über einen Compiler-Source-Übersetzer für GLSL, HLSL und LLVM, der die Codes von allen anderen High-Level-APIs in SPIR-V konvertiert. Vulkan nimmt dann die ausführungsbereite binäre Zwischeneingabe und verwendet sie in der Shader-Phase. Zusätzlich zu GLSL unterstützt Vulkan verschiedene domänenspezifische Sprachen, Tools, Frameworks und OpenGL-C-Kernel.
Vorhersagbarkeit
Das Abstraktionsniveau ist bei OpenGL sehr hoch, wie die meisten Die Operationen finden hinter den Kulissen statt. Dazu gehören Ressourcenverwaltung, Fehlerprüfung und-validierung, Vorkompilierung von Shadern und einige Synchronisationen.
Dieses implizite Design stellt sicher, dass der Entwickler nicht für jede Aktion Code schreiben muss, macht sie aber auch weniger vorhersehbar; Sie wissen nie, ob Ihr Code das tut, was er tun soll, bis er es tut. Außerdem plant der Treiber die Übermittlung von Jobs zur Verarbeitung, was zu Rendering-Unterbrechungen führt.
Vulkan ist anders. Es ist eine explizite API, was bedeutet, dass der Treiber keine Ressourcen verfolgt oder ihre Beziehungen definiert. Dies geschieht auf Anwendungsebene und erfordert, dass der Entwickler Code für jeden Prozess schreibt.
Der Vorteil davon ist, dass Jobs im Voraus zur Ausführung übermittelt werden. Dadurch ist die Auftragsverarbeitung in Vulkan vorhersehbar, optimiert und unterbrechungsfrei. Daher kommt es beim Rendern in Vulkan nicht zu Verzögerungen und Störungen, wie es bei OpenGL üblich ist.
OpenGL ist weniger vorhersehbar als Vulkan, da Sie nicht für jede Aktion Code schreiben müssen, während Sie dies bei Vulkan tun müssen.
©Den Rise/Shutterstock.com
Treiber-und Anwendungsebene
OpenGL überlässt als implizite API die Verantwortung für Ressourcenverwaltung und Zustandsverfolgung der Treiberebene. Infolgedessen ist die Anwendungsschicht in OpenGL sehr dünn. Das Rendern dauert länger, als wenn die meisten Ressourcenzuweisungsaufgaben auf der Anwendungsebene erledigt würden.
Auf der anderen Seite ist Vulkan so konzipiert, dass es so nah wie möglich an der Grafikhardware ist. Um dies zu erreichen, überlässt es die Verwaltung von Ressourcen, Logik und Zuständen den Anwendungen.
Indem Vulkan die Anwendungsschicht die Ressourcenzuweisung vornehmen lässt, gibt es dem Anwendungsentwickler die volle Kontrolle über die Computerressourcen des Hosts System. Wenn Sie also der Software den direkten Zugriff auf den Grafikprozessor erlauben, wird das GPU-Rendering so schnell wie möglich und die Leistung des Prozessors verbessert.
Applications Developer Control
Ein weiterer wichtiger Unterschied zwischen den beiden APIs ist das Maß an Kontrolle, das der Entwickler über den Systemspeicher hat. In OpenGL ist eine solche Kontrolle nicht vorhanden, da die Treiber interne Heuristiken verwenden, um die Systemressourcen, einschließlich Speicher, zuzuweisen. Die größte Herausforderung bei diesem Speichersteuerungsmodus besteht darin, dass er je nach Anbieter unterschiedlich ist und zu suboptimalen Zuweisungen oder Störungen führen kann, wenn die Ressource verschoben wird.
Vulkan legt die verschiedenen verfügbaren Speichertypen auf dem System offen und lässt den Entwickler Speicher nach eigenem Ermessen zuweisen und freigeben. Der Anwendungsprogrammierer muss den für den beabsichtigten Zweck am besten geeigneten Speichertyp auswählen.
Zusätzlich zu den Speichertypen gewährt Vulkan dem Entwickler auch Zugriff auf verfügbare Erweiterungen, Befehlspufferwarteschlangen und physische Geräte. Da der Treiber nicht eingreift, kann der Entwickler das Verhalten von Vulkan ändern, um die Anforderungen des Spiels zu erfüllen.
Multithread-Skalierbarkeit
OpenGL hat eine sehr schlechte Multithreading-Kapazität, was es schwierig macht um die Rechenleistung moderner CPUs zu nutzen. Aus diesem Grund hat es auch einen hohen CPU-Overhead.
Auch hier nimmt Vulkan den entgegengesetzten Weg. Es wurde speziell entwickelt, um die volle Multithreading-Kapazität der CPU explizit auszunutzen. Durch seine absichtliche Ressourcenkontrolle werden Jobs in verschiedene Threads aufgeteilt, von der Erstellung bis zur Ausführung.
Plattformübergreifende Spielportierung
Spielportierung zwischen Desktop-und mobilen Plattformen ist in OpenGL nicht möglich. Stattdessen gibt es zwei separate Versionen der API; die Desktop-basierte API (OpenGL) und OpenGL ES, eine eingebettete API für mobile Plattformen. Auch dann wird Desktop-Plattformen oft der Vorzug gegeben. Außerdem haben sich die GL-APIs erheblich langsamer entwickelt als GPU-Hardware und-Technologie; daher sind selbst die neuesten Implementierungen oft nur für die GPUs der vorherigen Generation geeignet.
Vulkan hat eine einheitliche API für alle Plattformen, da es sowohl Desktop-als auch mobile Rasterizer integriert. Es hat auch bessere Integrationswerkzeuge als OpenGL, da der Entwickler die Diagnose-und Validierungsebene unabhängig aktivieren kann. All dies macht die Desktop-und Mobilversionen der API ähnlich, was die Portierung von Spielen über die Plattformen hinweg ermöglicht. Außerdem legt Vulkan im Gegensatz zu OpenGL Priorität auf mobile Plattformen.
Fehlerprüfung
Bei OpenGL ist die Fehlerprüfung eine automatische Funktion der Treiberschicht. Infolgedessen können gut laufende Anwendungen leiden, wenn die Fehlerprüfung während der Ausführung nicht ausgelöst wird. Übermäßige und zufällige Fehlerprüfungen überlasten den PC ebenfalls.
Dagegen ist die Fehlerprüfung in Vulkan ein Add-On, das bei Bedarf ein-und ausgeschaltet werden kann, indem die Fehlerprüfung und andere Validierungsebenen aktiviert oder deaktiviert werden. Idealerweise werden diese Schichten zu Debugging-Zwecken während der Entwicklungsphase auf Vulkan aktiviert und dann während der Veröffentlichungsphase deaktiviert.
API-Größe
Vulkan ist im Allgemeinen eine dünnere API als OpenGL. Die Vorteile einer dünnen API sind ein geringer Overhead und ein hohes Maß an Kontrolle über die Ressourcenverwaltung. Daher können Entwickler auf Vulkan der Anwendungsschicht Frameworks und Hilfsbibliotheken hinzufügen. Aufgrund des geringen Overheads verlieren darauf aufbauende Produkte nur sehr wenig Leistung und Kontrolle über die API. Tatsächlich ist es möglich, OpenGL auf Vulkan aufzubauen.
Entwicklerstunden
Der Hauptvorteil von OpenGL gegenüber Vulkan ist, dass es dem Entwickler einige Stunden spart, wie es die Treiberschicht tut die Ressourcenzuweisung hinter den Kulissen. Bei Vulkan muss der Entwickler jedoch Code für jede beabsichtigte Aktion schreiben, indem er den Speichertyp, die Speichergrößenzuweisung, den Thread usw. auswählt. Infolgedessen benötigt Vulkan mehr Codezeilen für dieselbe Anwendung als OpenGL.
Die meisten Leute verwenden dies, um zu rechtfertigen, warum sich die Codierung auf Maschinenebene nicht lohnt. Für diejenigen jedoch, für die eine hohe Hardwareeffizienz der heilige Gral ist, lohnen sich die zusätzlichen Stunden. Außerdem müssen Sie dies im eigentlichen Sinne aufgrund der Erstellung von Befehlspuffern nur einmal und nicht für jede Anwendung tun.
Außerdem bietet Vulkan ein mehrschichtiges Ökosystem für Entwickler, um die Programmierebene zu wählen klar kommen. Vulkan-Experten und diejenigen, die maximale Flexibilität und Kontrolle benötigen, werden sich mit der direkten Nutzung von Vulkan begnügen. Wer die Entwicklungsphase beschleunigen möchte, setzt auf Libraries und Layer. Die Mehrheit der Vulkan-Benutzer fällt in diese Kategorie. Dann gibt es noch die letzte Kategorie derer, die Vulkan verwenden, um vorgefertigte Spiele-Engines zu optimieren.
OpenGL vs. Vulkan: 5 Fakten, die man kennen muss
Die erste Version von OpenGL wurde 1992 veröffentlicht , während die erste Version von Vulkan im Jahr 2016 veröffentlicht wurde. Der größte Vorteil von Vulkan ist, dass es eine Vielzahl von Plattformen unterstützt. Führende Spiele-Engines wie Unreal Engine 4, Unity und CryEngine bieten volle Vulkan-Unterstützung. Vulkan bietet Batching zur Priorisierung von On-Chip-Speichertanks und reduzieren Sie die CPU-Last. Viele wichtige Operationen sind in OpenGL verborgen, während sie in Vulkan zugänglich sind.
OpenGL vs. Vulkan: Was ist besser? Welche sollten Sie verwenden?
Wenn Sie sich zwischen den beiden APIs entscheiden müssen, hängt Ihre Entscheidung von den folgenden Faktoren ab:
Ihr Fachwissen: Wenn ja Neu in der Grafikwelt werden Sie wahrscheinlich einfache und kleine Anwendungen entwickeln. Beginnen Sie in diesem Fall mit OpenGL. Wenn Ihre Fähigkeiten wachsen, sollten Sie Vulkan lernen. Es ist die API für jeden, der eine Anwendung für moderne GPUs erstellen möchte.Das Zielbetriebssystem und die Zielhardware: OpenGL ist geeignet, wenn Sie sich nur für Windows-und Linux-Betriebssysteme interessieren oder beabsichtigen, die Compute-Shader auf iOS zu verwenden. Außerdem ist die Zielhardware ein kritischer Aspekt bei der Verwendung einiger Tools, wie z. B. dem integrierten GPU-Profiler von AMD, die nur mit DirectX und Vulkan funktionieren.Erforderliche Kontrollebenen: Wenn Sie die Kontrolle über die Ressourcenverwaltung haben müssen, wie z ein Entwickler, dann ist Vulkan die zu verwendende API. Es ist auch wichtig zu berücksichtigen, ob Ihre Anwendung CPU-gebunden ist und ihre Operationen auf verschiedene Kerne verteilt. Neue Projekte: Vulkan ist die beste API für diejenigen, die an einem neuen Projekt arbeiten, insbesondere auf mobilen Plattformen.
OpenGL wurde zu einer Zeit veröffentlicht, als GPUs nur Grafikgeräte waren. Die Zeit hat sich geändert; Heutzutage konzentrieren sich die meisten GPUs auf die Beschleunigung von Berechnungen und die Reduzierung der CPU-Last. Daher sind zukunftsorientierte APIs wie Vulkan der richtige Weg.
Trotzdem sollte man bedenken, dass Vulkan eine komplexere API als OpenGL ist und aufgrund seiner hohen Ausführlichkeit das Lernen Kurve ist sehr steil. Es erfordert auch ein hohes Maß an Verantwortung und mehr Wartung, um effektiv zu funktionieren. Aber hohe Leistung war schon immer teuer.
OpenGL vs. Vulkan: Was sind die Hauptunterschiede? FAQs (Frequently Asked Questions)
Kann Vulkan außerhalb der Gaming-Branche verwendet werden?
Vulkan ist die einzige moderne branchendefinierte API, die die Sicherheit eindeutig erfüllt kritische Zertifizierungsanforderungen anderer Branchen wie Avionik, Automobil und Industrie.
Welche Beziehung besteht zwischen OpenGL und OpenCL?
OpenCL ist eine der Compute-APIs, die darauf abzielen, die Rechenleistung von GPUs zu verbessern. Es ist mit OpenGL interoperabel.
Welche Vorteile bietet das Erstellen von Frameworks auf Vulkan?
Für ausgefeilte Algorithmen wie neuronale Netzwerkinferenz kann die Anwendungsschicht dies Nutzen Sie die übergeordneten Plattformen, während es bei Algorithmen, die ein hohes Maß an Ressourcenmanagement erfordern, direkt mit Vulkan interagiert.
Was ist der Unterschied zwischen Vulkan und Mantle?
Der Mantel ist die Grundlage von Vulkan. Daher bietet Vulkan alles, was Mantle versprochen hat: reduzierter CPU-Overhead und verbesserte GPU-Leistung und-Effizienz. Vulkan ist jedoch nicht hardwarebeschränkt wie Mantle auf AMD GCN. Es funktioniert auf GPUs von allen Anbietern und verschiedenen Betriebssystemen.
Kann ich OpenGL für Animationen verwenden?
OpenGL kann mehrere Funktionen ausführen, und Animationen sind eine davon von ihnen.