GPU

Introduction à la programmation GPU

Introduction à la programmation GPU

Le calcul à usage général sur un GPU (Graphics Processing Unit), mieux connu sous le nom de programmation GPU, est l'utilisation d'un GPU avec un CPU (Central Processing Unit) pour accélérer le calcul dans les applications traditionnellement gérées uniquement par le CPU.Même si la programmation GPU n'est pratiquement viable que depuis deux décennies, ses applications incluent désormais pratiquement tous les secteurs d'activité. Par exemple, la programmation GPU a été utilisée pour accélérer le traitement des signaux vidéo, d'images numériques et audio, la physique statistique, le calcul scientifique, l'imagerie médicale, la vision par ordinateur, les réseaux de neurones et l'apprentissage en profondeur, la cryptographie et même la détection d'intrusion, parmi de nombreux autres domaines.

Cet article sert d'introduction théorique à ceux qui voudraient apprendre à écrire des programmes accélérés par GPU ainsi qu'à ceux qui ont juste un intérêt général pour ce sujet fascinant.

La différence entre un GPU et un CPU

Bien avant que les graphiques 3D haute résolution et haute fidélité ne deviennent la norme, la plupart des ordinateurs n'avaient pas de GPU. Au lieu de cela, la CPU a exécuté toutes les instructions des programmes informatiques en effectuant les opérations arithmétiques, logiques, de contrôle et d'entrée/sortie (E/S) de base spécifiées 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 sur un périphérique d'affichage, a souvent aidé le CPU à résoudre des problèmes dans des domaines qui étaient auparavant gérés 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 CPU se compose de quelques cœurs optimisés pour le traitement séquentiel en série 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 parfaitement 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 de 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, 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é des couches de neurones du néocortex, permettant aux machines d'apprendre à comprendre le langage, à reconnaître des modèles ou à composer de la musique.

En raison de l'importance croissante de l'intelligence artificielle, la demande de développeurs qui comprennent l'informatique à usage général sur un GPU a grimpé en flèche.

CUDA contre OpenCL contre OpenACC

Étant donné que les GPU comprennent les problèmes de calcul en termes de primitives graphiques, les premiers efforts pour utiliser les GPU en tant que processeurs à usage général ont nécessité de reformuler les problèmes de calcul dans le langage des cartes graphiques.

Heureusement, il est maintenant beaucoup plus facile de faire du calcul accéléré par GPU grâce aux plates-formes de calcul parallèles telles que CUDA, OpenCL ou OpenACC de Nvidia. Ces plates-formes permettent aux développeurs d'ignorer la barrière de la langue qui existe entre le CPU et le GPU et, à la place, de se concentrer sur des concepts informatiques de plus haut niveau.

CUDA

Initialement publié par Nvidia en 2007, CUDA (Compute Unified Device Architecture) est le framework propriétaire dominant aujourd'hui. "Avec CUDA, les développeurs sont en mesure d'accélérer considérablement les applications informatiques en exploitant la puissance des GPU", décrit le framework 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 dont les développeurs ont besoin pour commencer à créer des applications accélérées par GPU qui surpassent largement leurs homologues liés au processeur.

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 OpenCL, DirectCompute de Microsoft, OpenGL Compute Shaders et C++ AMP.

OpenCL

Initialement publié par le groupe Khronos en 2009, OpenCL est le standard ouvert et libre de droits le plus populaire pour la programmation parallèle multiplateforme. 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 les titres de jeux et de divertissement, les logiciels scientifiques et médicaux, les outils créatifs professionnels, le traitement de la vision et la formation et l'inférence de réseaux neuronaux."

OpenCL a jusqu'à présent été implémenté 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 courants sur toutes les principales plates-formes, ce qui en fait extrêmement polyvalent. OpenCL définit un langage de type C pour l'écriture de programmes, mais des API tierces existent pour d'autres langages et plates-formes de programmation tels que Python ou Java.

OuvrirACC

OpenACC est le plus jeune standard de programmation pour le calcul parallèle décrit dans cet article. Il a été initialement publié en 2015 par un groupe de sociétés comprenant Cray, CAPS, Nvidia et PGI (le groupe Portland) pour simplifier la programmation parallèle de systèmes CPU/GPU hétérogènes.

« OpenACC est un modèle de programmation parallèle portable basé sur des directives et axé sur les utilisateurs, conçu pour les scientifiques et les ingénieurs intéressés par le portage de leurs codes vers une grande variété de plates-formes et d'architectures matérielles HPC hétérogènes avec un effort de programmation nettement inférieur à celui requis avec un bas niveau. maquette.,» déclare 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 doivent être accélérées. L'objectif est de fournir un modèle de programmation d'accélérateurs qui soit portable entre les systèmes d'exploitation et divers types de processeurs et d'accélérateurs hôtes.

Lequel dois-je utiliser?

Le choix entre ces trois plateformes de calcul parallèles dépend de vos objectifs et de l'environnement dans lequel vous travaillez. Par exemple, CUDA est largement utilisé dans les universités, et il est également considéré comme le plus facile à apprendre. OpenCL est de loin la plate-forme de calcul parallèle la plus portable, bien que les programmes écrits en OpenCL doivent encore être optimisés individuellement pour chaque plate-forme cible.

Apprendre le codage GPU sur LinuxHint.com

Programmation GPU avec Python

Programmation GPU avec C++

Lectures complémentaires

Pour vous familiariser avec CUDA, nous vous recommandons de suivre les instructions du guide de démarrage rapide de CUDA, qui explique comment installer CUDA et l'exécuter sur Linux, Windows et macOS. Le guide de programmation OpenCL d'AMD fournit une vue d'ensemble fantastique et approfondie d'OpenCL, mais il suppose que le lecteur est familiarisé avec les trois premiers chapitres de la spécification OpenCL. OpenACC propose un didacticiel d'introduction en trois étapes conçu pour montrer comment tirer parti de la programmation GPU, et plus d'informations peuvent être trouvées dans la spécification OpenACC.

Comment afficher la superposition OSD dans les applications et jeux Linux en plein écran
Jouer à des jeux en plein écran ou utiliser des applications en mode plein écran sans distraction peut vous couper des informations système pertinente...
Top 5 des cartes de capture de jeu
Nous avons tous vu et aimé des gameplays en streaming sur YouTube. PewDiePie, Jakesepticye et Markiplier ne sont que quelques-uns des meilleurs joueur...
Comment développer un jeu sur Linux
Il y a dix ans, peu d'utilisateurs de Linux prédisaient que leur système d'exploitation préféré serait un jour une plate-forme de jeu populaire pour l...