© Den Rise/Shutterstock.com
Le premier problème auquel chaque débutant est confronté dans le monde de l’API graphique est le choix de la bonne API. En ce qui concerne les API multiplateformes open source, OpenGL et Vulkan sont les principales considérations.
En quoi diffèrent-ils et lequel vaut la peine d’être choisi ? Cet article répond à ces questions avec une analyse approfondie des différences entre les deux API.
OpenGL contre Vulkan : une comparaison côte à côte
OpenGL vs Vulkan : Quelle est la différence ?
Définition
OpenGL
Silicon Graphics a publié le Open Graphics Library, OpenGL, en juin 1992 en tant qu’API open-source pour fournir une interface pour la programmation graphique. Au fil des ans, des améliorations et l’introduction d’autres extensions l’ont fait évoluer vers une API multilingue.
Le tournant a été l’introduction de l’extension de la version 4.2 qui permettait l’utilisation de shaders de calcul, ce qui rendait possible la synchronisation des threads et le partage de la mémoire. Il a transformé OpenGL en ce qu’il est aujourd’hui, une API pour le rendu accéléré par le matériel de graphiques vectoriels 2D et 3D.
Vulkan
Le groupe Khronos, AMD et DICE ont publié Vulkan en 2016 en tant qu’API open source multiplateforme qui fournit une interface pour la programmation et le rendu de jeux vidéo et d’autres applications graphiques 3D en temps réel. Il devait s’agir d’une version moderne d’OpenGL, qui répondrait aux besoins en évolution rapide de l’industrie du jeu tout en exploitant toutes les capacités des GPU modernes. Il était initialement connu sous le nom de Next Generation OpenGL avant d’être renommé Vulkan.
Vulkan est une API open source pour la programmation de jeux vidéo et d’applications graphiques 3D.
©monticello/Shutterstock.com
Design
Le la conception d’OpenGL l’a rendu adapté aux postes de travail graphiques qui ont des rendus directs. En conséquence, il pourrait ne pas convenir aux plates-formes de bureau, quel que soit le système d’exploitation. Le modèle de threading empêche la génération et l’exécution de commandes parallèles. Par conséquent, il ne pouvait pas fonctionner sur certaines plates-formes telles que les tablettes, les smartphones et les consoles.
Contrairement à OpenGL et à d’autres API avant lui, Vulkan est principalement conçu pour fonctionner sur diverses plates-formes, en particulier les mobiles et les consoles. Sa conception en couches permet la validation, le profilage et le débogage du code sans affecter les performances ; par conséquent, il peut soutenir une utilisation innovante d’outils GPU multi-fournisseurs.
Grâce à sa conception en couches, Vulkan offre un contrôle direct du GPU, une capacité exigée par la plupart des moteurs de jeu sophistiqués. Il s’appuie également sur des tampons de commandes, qui sont des commandes pré-générées, éliminant ainsi le besoin de compiler ou de valider lors de chaque boucle de rendu. En conséquence, cela réduit considérablement la surcharge du processeur.
Utilisation du processeur
Dans OpenGL, les appels exécutés ne sont pas mis en cache ; ainsi, de nombreux appels au mode noyau sont nécessaires pour modifier et valider l’état du pilote. D’autre part, Vulkan utilise des tampons de commande, améliorant ainsi l’utilisation des ressources du processeur.
La deuxième différence est la fonctionnalité de génération de tampon parallèle de Vulkan. Avec lui, Vulkan exploite la puissance de tous les cœurs de processeur, ce avec quoi OpenGL a eu du mal, étant donné qu’il a été conçu à une époque où les processeurs à plusieurs cœurs étaient inconnus. Avec des processeurs modernes ayant au moins huit cœurs, Vulkan est la seule API capable d’exploiter convenablement les possibilités qu’ils offrent.
Compilateurs de shaders
Les shaders de calcul permettent de tirer le meilleur parti des GPU. (unité de traitement graphique) au lieu de dépendre uniquement de la puissance du processeur du système. Cependant, ces API gèrent ces shaders différemment.
OpenGL utilise C++, un langage de haut niveau, avec un compilateur GLSL. Le compilateur s’exécute au niveau du pilote et écrit les shaders, qui sont ensuite traduits par le runtime de l’application en code machine pour le GPU.
Vulkan, cependant, raccourcit le processus en utilisant une représentation intermédiaire portable standard, SPIR-V Il dispose d’un traducteur source de compilateur pour GLSL, HLSL et LLVM qui convertit les codes de toutes les autres API de haut niveau en SPIR-V. Vulkan prend ensuite l’entrée intermédiaire binaire prête à être exécutée et l’utilise dans l’étape de shader. En plus de GLSL, Vulkan prend en charge divers langages, outils, frameworks et noyaux OpenGL C spécifiques à un domaine.
Prévisibilité
Le niveau d’abstraction est très élevé dans OpenGL, car la plupart des les opérations se déroulent dans les coulisses. Ils incluent la gestion des ressources, la vérification et la validation des erreurs, les shaders de pré-compilation et certaines synchronisations.
Cette conception implicite garantit que le développeur n’a pas besoin d’écrire des codes pour chaque action, mais la rend également moins prévisible ; vous ne savez jamais si votre code fera ce qu’il est censé faire jusqu’à ce qu’il le fasse. De plus, le pilote planifie les soumissions de travaux pour traitement, ce qui entraîne des interruptions de rendu.
Vulkan est différent. Il s’agit d’une API explicite, ce qui signifie que le pilote ne suit pas les ressources ni ne définit leurs relations. Cela se fait au niveau de l’application et nécessite que le développeur écrive du code pour chaque processus.
L’avantage est que les travaux sont soumis à l’avance pour exécution. Par conséquent, le traitement des tâches dans Vulkan est prévisible, rationalisé et ininterrompu. Ainsi, le rendu dans Vulkan ne souffre pas de décalages et d’accrocs comme c’est courant dans OpenGL.
OpenGL est moins prévisible que Vulkan car vous n’avez pas à écrire de code pour chaque action, alors que pour Vulkan, c’est le cas.
©Den Rise/Shutterstock.com
Couche pilote et application
OpenGL, en tant qu’API implicite, laisse la responsabilité de la gestion des ressources et du suivi de l’état à la couche pilote. En conséquence, la couche d’application est très mince dans OpenGL. Le rendu prend plus de temps qu’il ne le ferait si la plupart des tâches d’allocation des ressources étaient effectuées au niveau de la couche application.
D’autre part, Vulkan est conçu pour être aussi proche que possible du matériel graphique. Pour ce faire, il laisse la gestion des ressources, de la logique et des états aux applications.
En laissant la couche application faire l’allocation des ressources, Vulkan donne au développeur d’applications le contrôle total des ressources informatiques de l’hôte système. Par conséquent, permettre au logiciel d’accéder directement au processeur graphique rend le rendu du GPU aussi rapide que possible et améliore les performances du processeur.
Applications Developer Control
Une autre différence clé entre les deux API est le niveau de contrôle que le développeur a sur la mémoire du système. Dans OpenGL, un tel contrôle est inexistant car les pilotes utilisent des heuristiques internes pour allouer les ressources du système, y compris la mémoire. Le principal défi avec ce mode de contrôle de la mémoire est qu’il varie selon le fournisseur et peut entraîner des allocations sous-optimales ou des problèmes lorsque la ressource est déplacée.
Vulkan expose les différents types de mémoire disponibles sur le système et permet au développeur allouer et désallouer les mémoires à leur discrétion. Le programmeur d’application doit sélectionner le type de mémoire le mieux adapté à l’usage prévu.
En plus des types de mémoire, Vulkan accorde également au développeur l’accès aux extensions disponibles, aux files d’attente de tampons de commandes et aux périphériques physiques. Par conséquent, comme il n’y a pas d’interférence de la part du pilote, le développeur peut modifier le comportement de Vulkan pour répondre aux exigences du jeu.
Évolutivité multithread
OpenGL a une très faible capacité multithread, ce qui rend difficile pour tirer parti de la puissance de traitement des processeurs modernes. Pour cette raison, il a également une surcharge CPU élevée.
Là encore, Vulkan prend la trajectoire opposée. Il est spécifiquement conçu pour exploiter toute la capacité de multithreading du processeur de manière explicite. Grâce à son contrôle intentionnel des ressources, les tâches sont séparées en différents threads, de la création à l’exécution.
Portage de jeu multiplateforme
Le portage de jeu entre les plates-formes de bureau et mobiles est impossible dans OpenGL. Au lieu de cela, il existe deux versions distinctes de l’API ; l’API basée sur le bureau (OpenGL) et OpenGL ES, une API intégrée pour les plates-formes mobiles. Même dans ce cas, la priorité est souvent donnée aux plates-formes de bureau. De plus, les API GL ont évolué considérablement plus lentement que le matériel et la technologie GPU ; par conséquent, même les dernières implémentations ne conviennent souvent qu’aux GPU de la génération précédente.
Vulkan dispose d’une API unifiée pour toutes les plates-formes car il intègre à la fois les rastériseurs de bureau et mobiles. Il dispose également de meilleurs outils d’intégration qu’OpenGL, car le développeur peut activer indépendamment la couche de diagnostic et de validation. Tout cela rend les versions de bureau et mobiles de l’API similaires, ce qui rend possible le portage de jeux sur les plates-formes. De plus, contrairement à OpenGL, Vulkan accorde la priorité aux plates-formes mobiles.
Vérification des erreurs
Dans OpenGL, la vérification des erreurs est une fonction automatique de la couche pilote. Par conséquent, les applications qui s’exécutent correctement peuvent souffrir lorsque la vérification des erreurs n’est pas déclenchée pendant l’exécution. Des vérifications d’erreurs excessives et aléatoires surchargent également le PC.
Alors que, dans Vulkan, la vérification des erreurs se présente sous la forme d’un module complémentaire qui peut être activé et désactivé si nécessaire en activant ou en désactivant la vérification des erreurs et d’autres couches de validation. Idéalement, à des fins de débogage, ces couches sont activées sur Vulkan pendant la phase de développement, puis désactivées pendant la phase de publication.
Taille de l’API
Vulkan est généralement une API plus fine qu’OpenGL. Les avantages d’une API légère sont une faible surcharge et un haut niveau de contrôle de la gestion des ressources. Ainsi, les développeurs sur Vulkan peuvent ajouter des frameworks et des bibliothèques d’assistance à la couche application. De plus, en raison de sa faible surcharge, les produits construits dessus perdent très peu de performances et de contrôle de l’API. En fait, il est possible de construire OpenGL au-dessus de Vulkan.
Heures du développeur
Le principal avantage d’OpenGL par rapport à Vulkan est qu’il fait gagner quelques heures au développeur comme le fait la couche pilote l’allocation des ressources dans les coulisses. Sur Vulkan, cependant, le développeur doit écrire du code pour chaque action envisagée, en choisissant le type de mémoire, l’allocation de la taille de la mémoire, le thread, etc. Par conséquent, Vulkan nécessite plus de lignes de code pour la même application qu’OpenGL.
La plupart des gens l’utilisent pour justifier pourquoi le codage au niveau de la machine n’en vaut pas la peine. Cependant, pour ceux pour qui une efficacité matérielle élevée est le Saint Graal, les heures supplémentaires en valent la peine. De plus, dans le vrai sens du terme, vous n’avez besoin de le faire qu’une seule fois et non pour chaque application en raison de la création de tampons de commandes.
De plus, Vulkan offre un écosystème en couches permettant aux développeurs de choisir le niveau de programmation qu’ils peut gérer. Les experts de Vulkan et ceux qui ont besoin d’un maximum de flexibilité et de contrôle se contenteront d’utiliser Vulkan directement. Ceux qui souhaitent accélérer la phase de développement se tournent vers les bibliothèques et les couches. La majorité des utilisateurs de Vulkan entrent dans cette catégorie. Ensuite, il y a la dernière catégorie de ceux qui utilisent Vulkan pour optimiser les moteurs de jeux prêts à l’emploi.
OpenGL contre Vulkan : 5 faits incontournables
La version initiale d’OpenGL est sortie en 1992 , alors que la première version de Vulkan a été publiée en 2016. Le plus grand mérite de Vulkan est qu’il prend en charge une variété de plates-formes. Les principaux moteurs de jeu tels que Unreal Engine 4, Unity et CryEngine ont une prise en charge complète de Vulkan. et réduire la charge du processeur. De nombreuses opérations essentielles sont masquées sur OpenGL alors qu’elles sont accessibles dans Vulkan.
OpenGL contre Vulkan : lequel est le meilleur ? Laquelle devriez-vous utiliser ?
Si vous devez choisir entre les deux API, votre décision dépendra des facteurs suivants :
Votre niveau d’expertise : Si vous êtes nouveau dans le monde du graphisme, vous développerez probablement de petites applications simples. Dans ce cas, commencez par OpenGL. Au fur et à mesure que vos compétences grandissent, envisagez d’apprendre Vulkan. C’est l’API pour tous ceux qui souhaitent créer une application pour les GPU modernes.Le système d’exploitation et le matériel cibles : OpenGL convient si vous ne vous souciez que des systèmes d’exploitation Windows et Linux ou si vous avez l’intention d’utiliser les shaders de calcul sur iOS. En outre, le matériel cible est un facteur critique lors de l’utilisation de certains outils, tels que le profileur GPU intégré d’AMD, qui ne fonctionnent qu’avec DirectX et Vulkan.Niveaux de contrôle requis : si vous avez besoin de contrôler la gestion des ressources comme un développeur, alors Vulkan est l’API à utiliser. Il est également essentiel de déterminer si votre application est liée au processeur et distribue ses opérations sur différents cœurs.Nouveaux projets : Vulkan est la meilleure API pour ceux qui travaillent sur un nouveau projet, en particulier sur les plates-formes mobiles.
OpenGL est sorti à une époque où les GPU n’étaient que des périphériques graphiques. Le temps a changé; aujourd’hui, la plupart des GPU se concentrent sur l’accélération des calculs et la réduction des charges CPU. En tant que telles, les API tournées vers l’avenir telles que Vulkan sont la voie à suivre.
Néanmoins, il convient de garder à l’esprit que Vulkan est une API plus complexe qu’OpenGL, et en raison de sa grande verbosité, l’apprentissage la courbe est très raide. Il nécessite également un haut niveau de responsabilité et plus de maintenance pour fonctionner efficacement. Mais ensuite, les hautes performances ont toujours un prix élevé.
OpenGL vs Vulkan : quelles sont les principales différences ? FAQ (Foire aux questions)
Vulkan peut-il être utilisé en dehors de l’industrie du jeu ?
Vulkan est la seule API moderne définie par l’industrie qui répond clairement aux exigences de sécurité exigences de certification critiques d’autres industries telles que l’avionique, l’automobile et l’industrie.
Quelle est la relation entre OpenGL et OpenCL ?
OpenCL est l’un des des API de calcul visant à améliorer la capacité de calcul des GPU. Il est interopérable avec OpenGL.
Quels sont les avantages de la création de frameworks sur Vulkan ?
Pour les algorithmes sophistiqués tels que l’inférence de réseau neuronal, la couche application peut tirer parti des plates-formes de niveau supérieur, tandis que pour les algorithmes qui nécessitent un degré élevé de gestion des ressources, il interagit directement avec Vulkan.
Quelle est la différence entre Vulkan et Mantle ?
Le Manteau est le fondement de Vulkan. Par conséquent, Vulkan offre tout ce que Mantle a promis: réduction de la surcharge du processeur et amélioration des performances et de l’efficacité du GPU. Cependant, Vulkan n’est pas limité au matériel comme Mantle l’est pour AMD GCN. Il fonctionne sur les GPU de tous les fournisseurs et de différents systèmes d’exploitation.
Puis-je utiliser OpenGL pour les animations ?
OpenGL peut remplir plusieurs fonctions, et les animations en sont une d’entre eux.