Programmation GPU

Présentation de la programmation GPU avec Nvidia CUDA

Featured image

(Les illustrations utilisées proviennent du cours de Pierre-François Bonnefoi, source : https://p-fb.net/master1/gpgpu/cours/cuda.pdf)

À propos de la programmation GPU

La programmation GPU (ou GPUGPU pour General-Purpose computing on Graphics Processing Units) vise à exploiter la puissance des calculs qu’est capable une carte graphique, pour des tâches massivement parallélisables.

Tandis qu’un CPU est surtout dédié aux traitements de tâches rapides et séquentielles, les cartes graphiques apportent une nouvelle architecture de programmation très favorable au parallélisme. Le précurseur a surtout été Nvidia qui développe depuis 2007 une interface matérielle et un langage de programmation basé en C : CUDA (Compute Unified Device Architecture)

Cuda ? Comment ça marche ? 🤔

Avec CUDA, on sépare l’architecture CPU (appelé Host) de l’architecture GPU (appelé Device). L’hôte possède sa propre RAM contenant ses programmes et ses variables, tandis que le GPU ne s’occupe de n’exécuter que la partie du code qui lui est dédiée, que l’on appelle kernel. Les deux architectures s’échangent des données via un bus PCI.

Échange CPU / GPU - PFB

C’est donc toujours le CPU qui aura le contrôle des deux architectures :

Et à quoi ça ressemble, un GPU ?

Question pas très évidente, cher ami !

ArchitectureGPU

En programmation GPU :

En CUDA, la mémoire est construire similairement, mais de manière hiérarchique :

Il existe également la notion de warp au sein d’un bloc (un wrap étant un groupe de 32 threads synchronisées), mais si vous souhaitez en savoir plus, je vous invite à suivre le cours de Pierre-François Bonnefoi 😉 : https://p-fb.net/master1/gpgpu/cours/cuda.pdf

Les usages de la programmation GPU

Évidemment, l’usage le plus connu de la programmation GPU reste dans le milieu du jeu-vidéo et des effets spéciaux.

Mais on en trouve aussi dans le milieu scientifique : En fournissant une plus forte puissance de calcul qu’avec un CPU, on peut effectuer des simulations, de l’analyse et du traitement de données en des temps plus raisonnables !

Durant le Master CRYPTIS (et donc en rapport avec la cryptographie RSA), j’ai pu créer des programmes CUDA permettant de casser la factorisation en nombre premiers de nombres immenses. 😉