CPU vs GPU : différences d'architecture et d'usage
Un CPU est conçu pour terminer une tâche le plus vite possible : il possède donc quelques cœurs puissants dotés de grands caches et d'une logique de contrôle élaborée. Un GPU est conçu pour traiter simultanément de nombreuses tâches similaires : il possède des milliers d'unités arithmétiques simples et masque les délais mémoire en basculant entre un très grand nombre de threads. Les CPU excellent dans le travail complexe, riche en branchements et séquentiel ; les GPU dans le calcul massivement parallèle comme le graphisme et le deep learning.
| Critère | CPU | GPU |
|---|---|---|
| Objectif de conception | Faible latence : terminer un seul thread le plus vite possible | Débit élevé : effectuer le plus de travail total possible |
| Nombre de cœurs | De quelques-uns à quelques centaines de cœurs complexes | Des milliers d'unités arithmétiques simples, regroupées en blocs plus grands |
| Modèle d'exécution | Exécution dans le désordre et prédiction de branchement dans chaque cœur, plus des instructions SIMD | SIMT : des groupes de threads (par exemple 32) exécutent ensemble la même instruction |
| Logique de contrôle et cache | De grands caches et une logique de contrôle sophistiquée occupent une grande partie de la puce | Davantage de surface est consacrée aux unités arithmétiques ; les caches sont plus petits par thread |
| Masquage de la latence mémoire | Principalement par les caches et le prefetching | Principalement en basculant vers d'autres threads prêts pendant qu'un thread attend |
| Mémoire | DDR ou LPDDR, typiquement de quelques dizaines à quelques centaines de GB/s de bande passante | GDDR ou HBM, typiquement de quelques centaines de GB/s à plusieurs TB/s de bande passante |
| Branchements | Gère bien les branchements et le code irrégulier | Ralentit lorsque les threads d'un groupe prennent des branches différentes (divergence) |
| Emplacement des données | Travaille directement sur la mémoire principale | Un GPU discret a sa propre mémoire, les données doivent donc être copiées via un bus comme le PCIe |
| Programmation | Presque tous les langages et outils | Modèles spécialisés comme CUDA, HIP, OpenCL et les langages de shaders graphiques |
| Charges de travail typiques | Systèmes d'exploitation, bases de données, logique de contrôle, applications générales | Graphisme, calcul matriciel et vectoriel, deep learning, simulation |
Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.