Le calcul par le GPU (également appelé GPGPU) consiste à utiliser le processeur graphique (GPU) pour exécuter des tâches de calcul polyvalentes de science et d’ingénierie.
Le calcul par le GPU permet d’utiliser à la fois le CPU et le GPU dans un modèle de calcul hétérogène à co-traitement. Les parties séquentielles des applications sont traitées par le CPU, alors que le GPU gère et accélère les tâches de calcul les plus intensives. Pour les utilisateurs, les applications tournent ainsi plus vite car les capacités avancées du GPU permettent de booster les performances du système.

Ces dernières années, les GPU ont grandement évolué et ils intègrent maintenant plusieurs téraflops de performances de calcul en virgule flottante. En 2006-2007, NVIDIA a révolutionné les procédures de GPGPU et de calcul accéléré grâce à CUDA, sa nouvelle architecture massivement parallèle. L’architecture CUDA est composée de plusieurs centaines de cœurs de traitement travaillant simultanément afin de traiter un grand nombre de données.
Le succès du GPGPU est en grande partie dû à la flexibilité du modèle de programmation parallèle CUDA. Avec ce modèle, les développeurs d’applications peuvent maintenant modifier leurs programmes afin d’affecter au GPU le traitement des kernels de calcul les plus lourds, le reste de l’application restant affecté au CPU. Le mappage d’une fonction vers le GPU implique la réécriture de son code dans le langage « C pour CUDA » afin d’exploiter son parallélisme et de pouvoir traiter les données échangées avec le GPU. Les développeurs peuvent ainsi lancer plusieurs milliers de threads simultanément. La configuration matérielle du GPU permet de gérer les threads et d’en assurer la programmation.
Les GPU Tesla série 20 sont basés sur la nouvelle architecture Fermi, qui représente la troisième génération d'architectures CUDA. Fermi intègre des fonctions optimisées pour les applications scientifiques, dont : le support matériel IEEE de double précision en virgule flottante (plus de 500 gigaflops de puissance de calcul), les caches L1 et L2, la protection d’erreur de mémoire ECC, la gestion personnalisée des caches de données locales avec la mémoire partagée du GPU, les accès mémoires « coalesced », et bien plus encore.
Histoire du calcul par le GPU
À l’origine, les puces graphiques étaient uniquement composées de pipelines graphiques à fonction fixe. Au fil des années, la programmation de ces puces graphiques a énormément évolué. NVIDIA a exploité cette évolution pour sortir le tout premier processeur graphique (GPU), équivalent graphique du traditionnel processeur central (CPU). Entre 1999 et 2000, les chercheurs informatiques et les spécialistes de l’imagerie médicale et de l’électromagnétique ont commencé à utiliser les GPU pour exécuter des opérations de calcul générales. Les excellentes performances de virgule flottante des GPU leur ont offert un incroyable boost de performances en matière de recherche scientifique. C’était l’avènement du mouvement appelé GPGPU (pour « General Purpose computing on GPUs », « calcul généraliste sur les GPU »).
Seul problème : le GPGPU exigeait d’utiliser des langages de programmation graphique comme OpenGL et Cg afin d’assurer la compatibilité avec le CPU. Par conséquent, les développeurs devaient programmer leurs applications scientifiques à la manière des applications graphiques, ce qui limitait l’accessibilité aux incroyables performances des GPU pour la science, car l’aspect graphique était privilégié sur les capacités de calcul.
NVIDIA a réalisé le potentiel des performances des GPU pour la communauté scientifique, et a décidé de modifier ses GPU afin de faciliter leur programmation pour les applications scientifiques et de les rendre compatibles avec des langages à hautes performances comme C, C++ et Fortran. C’est ainsi qu’est née l’architecture CUDA pour les GPU.
Architecture parallèle CUDA et modèle de programmation
CUDA, c’est l’alliage d’une architecture matérielle et d’un modèle de programmation parallèles fournissant une grande gamme de capacités permettant l’expression de données denses et complexes dans un contexte de parallélisme. Les programmeurs peuvent choisir d’exprimer le parallélisme avec des langages à hautes performances comme C, C++ et Fortran ou avec des API comme OpenCL™ et DirectX™ 11 Compute.

Aujourd’hui, NVIDIA fournit aux développeurs un support intégral pour la programmation GPU avec C, C++, Fortran, OpenCL et DirectCompute. Une nouvelle gamme d’outils de développement logiciel de bibliothèques et de logiciels middleware est désormais accessible aux développeurs, comme présenté ci-dessus et accessible via le lien suivant . Les GPU peuvent être programmés avec le langage C en utilisant un ensemble efficace de mots-clés et d’extensions. Par ailleurs, le support des langages Fortran et OpenCL (entres autres) sera bientôt disponible.
Le modèle de programmation parallèle de CUDA permet de partitionner un problème en plusieurs sous-problèmes qui peuvent être résolus rapidement avec la puissance parallèle des GPU. La composition de chaque sous-problème est de telle nature qu’il peut être traité sur un plan parallèle avec tous les autres sous-problèmes.
OpenCL est une marque commerciale d’Apple Inc. utilisée sous licence par Khronos Group Inc.
DirectX est une marque déposée de Microsoft Corporation.