L'informatique à usage général sur un GPU (unité de traitement graphique), mieux connue sous le nom de programmation GPU, est l'utilisation d'un GPU avec un CPU (unité de traitement centrale) pour accélérer le calcul dans les applications traditionnellement manipulées uniquement par le CPU.Même si la programmation GPU n'a été pratiquement viable que depuis deux décennies, ses applications incluent désormais pratiquement toutes les industries. Par exemple, la programmation GPU a été utilisée pour accélérer la vidéo, l'image numérique et le traitement du signal audio, la physique statistique, l'informatique scientifique, l'imagerie médicale, la vision informatique, les réseaux de neurones et l'apprentissage en profondeur, la cryptographie et même la détection des intrusions, entre de nombreux autres domaines.
Cet article sert d'introduction théorique destinée à ceux qui souhaitent apprendre à rédiger des programmes accélérés par le GPU ainsi que ceux qui n'ont qu'un intérêt général pour ce sujet fascinant.
Longtemps avant que les graphiques 3D haute résolution à haute résolution ne deviennent la norme, la plupart des ordinateurs n'avaient pas de GPU. Au lieu de cela, le CPU a effectué toutes les instructions des programmes informatiques en effectuant les opérations de base arithmétique, logique, de contrôle et d'entrée / sortie (E / S) spécifiée par les instructions. Pour cette raison, le CPU est souvent décrit comme le cerveau de l'ordinateur.
Mais ces dernières années, le GPU, qui est conçu pour accélérer la création d'images pour la sortie d'un dispositif d'affichage, a souvent aidé le CPU à résoudre les problèmes dans les zones qui étaient auparavant gérées uniquement par le CPU.
Le fabricant de cartes graphiques NVIDIA fournit un moyen simple de comprendre la différence fondamentale entre un GPU et un CPU: «Un processeur se compose de quelques cœurs optimisés pour le traitement série séquentiel tandis qu'un GPU a une architecture massivement parallèle composée de milliers de plus petits, plus efficaces noyaux conçus pour gérer plusieurs tâches simultanément."
La possibilité de gérer plusieurs tâches en même temps rend les GPU très adaptés à certaines tâches, telles que la recherche d'un mot dans un document, tandis que d'autres tâches, telles que le calcul de la séquence Fibonacci, ne bénéficient pas du tout du traitement parallèle.
Cependant, parmi les tâches qui bénéficient considérablement du traitement parallèle, il y a l'apprentissage en profondeur, l'une des compétences les plus recherchées en technologie aujourd'hui. Les algorithmes d'apprentissage en profondeur imitent l'activité en couches de neurones dans le néocortex, permettant aux machines d'apprendre à comprendre la langue, à reconnaître les modèles ou à composer de la musique.
À la suite de l'importance croissante de l'intelligence artificielle, la demande de développeurs qui comprennent l'informatique à usage général sur un GPU monte en flèche.
Parce que les GPU comprennent les problèmes de calcul en termes de primitives graphiques, les premiers efforts pour utiliser les GPU comme processeurs à usage général ont nécessité la reformulation des problèmes de calcul dans le langage des cartes graphiques.
Heureusement, il est désormais beaucoup plus facile de faire l'informatique accélérée par le GPU grâce à des plateformes informatiques parallèles telles que NVIDIA's CUDA, OpenCL ou OpenACC. Ces plateformes permettent aux développeurs d'ignorer la barrière linguistique qui existe entre le CPU et le GPU et, plutôt, se concentrer sur les concepts informatiques de niveau supérieur.
Cuda
Initialement publié par NVIDIA en 2007, CUDA (calcul Unified Device Architecture) est le cadre propriétaire dominant aujourd'hui. «Avec CUDA, les développeurs peuvent accélérer considérablement les applications informatiques en exploitant la puissance des GPU», décrit le cadre Nvidia.
Les développeurs peuvent appeler Cuda à partir de langages de programmation tels que C, C ++, Fortran ou Python sans aucune compétence en programmation graphique. De plus, la boîte à outils CUDA de NVIDIA contient tout ce que les développeurs ont besoin pour commencer à créer des applications accélérées par le GPU qui surpassent considérablement leurs homologues liés au CPU.
Le SDK CUDA est disponible pour Microsoft Windows, Linux et MacOS. La plate-forme CUDA prend également en charge d'autres interfaces de calcul, notamment l'OpenCL, le DirectCompute de Microsoft, les shaders de calcul OpenGL et l'ampli C ++.
Opencl
Initialement publié par le groupe Khronos en 2009, OpenCL est la norme libre et la plus populaire libre de droits pour la programmation parallèle de la plate-plateforme. Selon le groupe Khronos, «OpenCL améliore considérablement la vitesse et la réactivité d'un large éventail d'applications dans de nombreuses catégories de marché, notamment des titres de jeu et de divertissement, des logiciels scientifiques et médicaux, des outils créatifs professionnels, du traitement de la vision et de la formation du réseau neuronal et de l'inférence."
OpenCl a jusqu'à présent été mis en œuvre par Altera, AMD, Apple, ARM, Creative, IBM, Imagination, Intel, Nvidia, Qualcomm, Samsung, Vivante, Xilinx et Ziilabs, et il prend en charge tous les systèmes d'exploitation populaires sur toutes les principales plateformes, ce qui en fait extrêmement polyvalent. OpenCL définit un langage de type C pour les programmes d'écriture, mais des API tierces existent pour d'autres langages de programmation et plates-formes telles que Python ou Java.
OpenACC
OpenACC est la plus jeune norme de programmation pour l'informatique parallèle décrite dans cet article. Il a été initialement publié en 2015 par un groupe d'entreprises comprenant Cray, Caps, Nvidia et PGI (le groupe Portland) pour simplifier la programmation parallèle des systèmes hétérogènes CPU / GPU.
«OpenACC est un modèle de programmation parallèle portable par les performances basé sur l'utilisateur conçu pour les scientifiques et les ingénieurs intéressés à transporter leurs codes dans une large variété de plates-formes et d'architectures matérielles hétérogènes HPC avec un effort de programmation nettement moins que nécessaire avec un niveau de faible niveau de faible niveau que celle requise avec un niveau de faible niveau de faible niveau que celle requise avec un niveau de bas niveau de faible niveau que celle requise avec un niveau de faible niveau de faible niveau que celle requise avec un niveau de bas niveau de bas niveau de faible niveau que ce qui est nécessaire avec un niveau de bas niveau de faible niveau de niveau de bas niveau modèle.,»States OpenACC sur son site officiel.
Les développeurs intéressés par OpenACC peuvent annoter le code source C, C ++ et FORTRAN pour indiquer au GPU quelles zones qui devraient être accélérées. L'objectif est de fournir un modèle de programmation d'accélérateur qui est portable sur les systèmes d'exploitation et divers types de processeurs et d'accélérateurs hôtes.
Lequel devrais-je utiliser?
Le choix entre ces trois plates-formes informatiques parallèles dépend de vos objectifs et de l'environnement dans lequel vous travaillez. Par exemple, Cuda est largement utilisée dans le monde universitaire, et elle est également considérée comme la plus facile à apprendre. OpenCl est de loin la plate-forme informatique parallèle la plus portable, bien que les programmes écrits dans OpenCl doivent toujours être optimisés individuellement pour chaque plate-forme cible.
https: // linuxhint.com / gpu programmation-python /
https: // linuxhint.com / GPU-programme-CPP /
Pour vous familiariser avec Cuda, nous vous recommandons de suivre les instructions du Guide de démarrage rapide CUDA, qui explique comment faire fonctionner Cuda sur Linux, Windows et MacOS. Le guide de programmation OpenCL d'AMD offre un aperçu fantastique et approfondi d'OpenCL, mais il suppose que le lecteur connaît les trois premiers chapitres de la spécification OpenCL. OpenACC propose un tutoriel d'introduction en trois étapes conçu pour montrer comment profiter de la programmation GPU, et plus d'informations peuvent être trouvées dans la spécification OpenACC.