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èreCPUGPU
Objectif de conceptionFaible latence : terminer un seul thread le plus vite possibleDébit élevé : effectuer le plus de travail total possible
Nombre de cœursDe quelques-uns à quelques centaines de cœurs complexesDes milliers d'unités arithmétiques simples, regroupées en blocs plus grands
Modèle d'exécutionExécution dans le désordre et prédiction de branchement dans chaque cœur, plus des instructions SIMDSIMT : des groupes de threads (par exemple 32) exécutent ensemble la même instruction
Logique de contrôle et cacheDe grands caches et une logique de contrôle sophistiquée occupent une grande partie de la puceDavantage de surface est consacrée aux unités arithmétiques ; les caches sont plus petits par thread
Masquage de la latence mémoirePrincipalement par les caches et le prefetchingPrincipalement en basculant vers d'autres threads prêts pendant qu'un thread attend
MémoireDDR ou LPDDR, typiquement de quelques dizaines à quelques centaines de GB/s de bande passanteGDDR ou HBM, typiquement de quelques centaines de GB/s à plusieurs TB/s de bande passante
BranchementsGère bien les branchements et le code irrégulierRalentit lorsque les threads d'un groupe prennent des branches différentes (divergence)
Emplacement des donnéesTravaille directement sur la mémoire principaleUn GPU discret a sa propre mémoire, les données doivent donc être copiées via un bus comme le PCIe
ProgrammationPresque tous les langages et outilsModèles spécialisés comme CUDA, HIP, OpenCL et les langages de shaders graphiques
Charges de travail typiquesSystèmes d'exploitation, bases de données, logique de contrôle, applications généralesGraphisme, 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.

Quand choisir l'un ou l'autre ?

CPU
Lorsque le travail est séquentiel, riche en branchements ou exige une réponse rapide d'un seul thread : exécution du système d'exploitation, logique applicative, bases de données.
GPU
Lorsque la même opération s'applique à une énorme quantité de données : rendu d'images, entraînement et exécution de réseaux de neurones, simulation scientifique.
Ensemble
La plupart des systèmes utilisent les deux. Le CPU exécute le programme et prépare les données, le GPU effectue le calcul parallèle intensif. Confier trop peu de travail à un GPU peut être plus lent que de rester sur le CPU, à cause du coût de copie des données.

Questions fréquentes

Pourquoi un GPU est-il plus rapide qu'un CPU pour le deep learning ?

Le deep learning repose essentiellement sur du calcul matriciel décomposable en de nombreuses opérations identiques. Un GPU possède des milliers d'unités arithmétiques simples et une bande passante mémoire très élevée, il traite donc ce travail parallèle bien mieux que les quelques cœurs complexes d'un CPU.

Un GPU peut-il remplacer un CPU ?

Non. Les GPU sont peu performants sur le code séquentiel riche en branchements et ont besoin d'un CPU pour exécuter le système d'exploitation et les alimenter en données. Les deux travaillent ensemble.

Que signifie SIMT sur un GPU ?

SIMT (single instruction, multiple threads) signifie qu'un groupe de threads, par exemple 32, exécute ensemble la même instruction sur des données différentes. Si les threads d'un groupe prennent des branches différentes, ils s'exécutent les uns après les autres : c'est la divergence.

Pourquoi utiliser un GPU peut-il être plus lent pour de petites tâches ?

Les données doivent être copiées entre la mémoire du CPU et celle du GPU via un bus comme le PCIe. Pour une petite quantité de travail, le temps de copie peut dépasser le temps gagné grâce au GPU.

Vérifier vos connaissances

Quelle est la différence entre le mode SIMT (instruction unique, threads multiples) des GPU et les instructions SIMD des CPU ?

  1. ALe SIMT applique simultanément plusieurs instructions à une donnée, le SIMD une instruction à une donnée
  2. BSIMT et SIMD sont strictement identiques, seul le nom diffère
  3. CEn SIMT, chaque thread s'écrit comme un programme indépendant et le matériel gère les branchements, alors qu'en SIMD le programmeur ou le compilateur utilise explicitement des instructions vectorielles de largeur fixe
Afficher la réponse et l'explication

Réponse : C. En SIMT, chaque thread s'écrit comme un programme indépendant et le matériel gère les branchements, alors qu'en SIMD le programmeur ou le compilateur utilise explicitement des instructions vectorielles de largeur fixe

En SIMD sur CPU, une instruction s'applique à un registre vectoriel regroupant 4 ou 8 données ; le programme est donc écrit en tenant compte de la largeur du vecteur. En SIMT sur GPU, le programmeur écrit normalement le traitement d'un seul thread, et le matériel regroupe les threads par 32 pour les exécuter avec la même instruction. Les branchements par thread sont permis : le matériel exécute successivement les chemins divergents, mais l'efficacité baisse alors.

Quelle est la principale raison pour laquelle les GPU conviennent aux calculs matriciels et à l'entraînement et l'inférence en IA ?

  1. ALeur fréquence d'horloge est plus de 100 fois celle d'un CPU
  2. BIls disposent de nombreuses unités de calcul simples et traitent de grandes quantités de données en parallèle
  3. CIls n'ont pas de mémoire
Afficher la réponse et l'explication

Réponse : B. Ils disposent de nombreuses unités de calcul simples et traitent de grandes quantités de données en parallèle

Le GPU, conçu à l'origine pour traiter simultanément de nombreux pixels d'écran, aligne des milliers à plus de 10 000 unités de calcul simples. Pour les traitements qui répètent le même calcul sur de grandes quantités de données, comme le calcul matriciel, ce parallélisme offre des performances élevées. Les GPU récents intègrent des unités dédiées au calcul matriciel (Tensor Core, etc.) et de la HBM à large bande passante, et sont devenus les principaux acteurs de l'entraînement en IA. Les traitements séquentiels riches en branchements restent le point fort du CPU.

Quelle est la caractéristique générale des caches GPU par rapport à ceux des CPU ?

  1. ALes GPU n'ont aucun cache
  2. BLes GPU ont aussi des caches L1 et L2, mais le nombre de threads simultanés étant très élevé, la capacité de cache par thread est bien plus faible
  3. CLe cache GPU par thread est plusieurs fois plus grand que celui d'un CPU
Afficher la réponse et l'explication

Réponse : B. Les GPU ont aussi des caches L1 et L2, mais le nombre de threads simultanés étant très élevé, la capacité de cache par thread est bien plus faible

Les GPU disposent aussi d'un cache L1 par SM et d'un cache L2 partagé par toute la puce, mais plusieurs dizaines de milliers de threads s'exécutant simultanément, la capacité disponible par thread est d'un ordre de grandeur inférieure à celle d'un thread CPU. La philosophie du GPU n'est pas de compter sur le cache pour réduire la latence, mais de la masquer par le basculement entre de nombreux warps et d'optimiser l'usage mémoire par l'accès coalescé et la mémoire partagée.

  1. Dans un programme utilisant un GPU discret, quel énoncé est généralement correct au sujet de la mémoire côté CPU et côté GPU ?
  2. Envoyer des données au GPU pour un traitement léger, comme une seule addition par élément d'un tableau, peut être plus lent qu'un calcul sur CPU. Quelle en est la raison principale ?
  3. Pourquoi le transfert vers le GPU est-il plus rapide lorsque la mémoire CPU est épinglée (verrouillée en pages) ?

Questions d'entraînement sur Programmation GPU

Termes clés expliqués

GPU
Abréviation de Graphics Processing Unit. Processeur doté de très nombreuses unités de calcul simples, qui traite en parallèle de grandes quantités de données. Utilisé pour le graphisme ainsi que pour l'entraînement et l'inférence en IA.
SIMD
Abréviation de Single Instruction, Multiple Data. Mode où une seule instruction applique la même opération à plusieurs données à la fois. Accélère le traitement d'images et les calculs d'IA.
Mémoire cache
Mémoire rapide de faible capacité placée près du CPU. Elle conserve les données fréquemment utilisées pour compenser l'écart de vitesse avec la mémoire principale. Réalisée principalement en SRAM.
HBM
Mémoire constituée de plusieurs puces de DRAM empilées et reliées par des TSV, offrant une bande passante élevée grâce à un bus très large.

Comparatifs associés