Qu'est-ce que CUDA ?

Environnement de programmation permettant d'effectuer des calculs généraux sur les GPU NVIDIA. Les noyaux s'écrivent dans une extension du C++, et le parallélisme s'exprime par la hiérarchie grille-bloc-thread.

Nom japonais: CUDA

« CUDA » apparaît dans 18 questions d'entraînement réparties sur 1 thèmes, dont Programmation GPU.

Domaine: Programmation GPU

S'entraîner : questions sur CUDA

Quelle est la définition du « noyau » (kernel) en programmation GPU, par exemple en CUDA ?

  1. ALa partie centrale du système d'exploitation du GPU
  2. BUne fonction exécutée simultanément par de nombreux threads sur le GPU
  3. CUn composant refroidissant la puce GPU
Afficher la réponse et l'explication

Réponse : B. Une fonction exécutée simultanément par de nombreux threads sur le GPU

En programmation GPU, un noyau est une fonction lancée depuis le programme côté CPU et dont le même code est exécuté par de nombreux threads sur le GPU. Chaque thread utilise son propre indice pour choisir l'élément de données dont il est chargé. Pour une addition de tableaux par exemple, on écrit le noyau pour qu'un thread additionne un élément, et l'on lance autant de threads que d'éléments. Le mot est le même que pour le noyau d'un système d'exploitation, mais le sens diffère.

Quelle est la hiérarchie correcte des threads en CUDA (du plus grand au plus petit) ?

  1. AGrille → bloc → thread
  2. BThread → bloc → grille
  3. CBloc → thread → grille
Afficher la réponse et l'explication

Réponse : A. Grille → bloc → thread

Un lancement de noyau forme une grille, divisée en de nombreux blocs, eux-mêmes divisés en de nombreux threads. Les threads d'un même bloc sont exécutés sur le même SM (ensemble d'unités de calcul) et peuvent coopérer via la mémoire partagée et se synchroniser. Les blocs différents s'exécutant indépendamment, le nombre de blocs actifs simultanément varie selon la taille du GPU, et un même programme fonctionne sur des GPU petits ou grands.

« CUDA » dans les explications

Questions mentionnant « CUDA » (18)

  1. Quelle est la définition du « noyau » (kernel) en programmation GPU, par exemple en CUDA ?
  2. Quelle est la hiérarchie correcte des threads en CUDA (du plus grand au plus petit) ?
  3. Dans un noyau CUDA, l'indice i de chaque thread est obtenu par l'expression ci-dessus. Que vaut i pour le thread tel que blockIdx.x=2, blockDim.x=256 et threadIdx.x=5 ?
  4. Pourquoi le noyau CUDA ci-dessus contient-il « if (i < n) » ?
  5. Quelle est la caractéristique de la mémoire partagée (shared memory) en CUDA ?
  6. Quel est le rôle de __syncthreads() en CUDA ?
  7. En CUDA, __syncthreads() est placé dans « if (threadIdx.x < 16) », de sorte que seuls certains threads le franchissent. Que peut-il se produire ?
  8. Quelle est la définition des conflits de banc (bank conflicts) de la mémoire partagée CUDA ?
  9. Quelle est la relation entre les blocs et les SM (multiprocesseurs de flux) en CUDA ?
  10. En CUDA, on veut, au milieu d'un noyau, attendre que tous les autres blocs aient terminé leur calcul avant de passer à l'étape suivante. Quelle est la méthode usuelle ?
  11. Quel est l'objectif principal de l'utilisation de plusieurs flux (streams) CUDA ?
  12. Quelle est la définition de la mémoire unifiée (unified memory) de CUDA ?
  13. Quelle règle générale guide le choix du nombre de threads par bloc en CUDA ?
  14. Pour quel type d'accès la mémoire constante de CUDA est-elle particulièrement rapide ?
  15. En CUDA, quel est généralement le comportement juste après le lancement d'un noyau par le programme côté CPU ?

Termes associés

GPU Mémoire partagée (shared memory) Multiprocesseur de flux (SM) Noyau GPU (kernel) Via Banc (bank) Mémoire unifiée Défaut de page (page fault) Mémoire constante Taux d'occupation (occupancy)

Retour au glossaire