Programmation GPU

En CUDA, comment le programme côté CPU reçoit-il les résultats calculés par un noyau GPU (une fonction marquée __global__) ?

  1. APar la valeur de retour du noyau, qui renvoie ensemble au CPU les résultats de tous les threads
  2. BLe noyau écrit ses résultats dans un tableau en mémoire GPU et, une fois le noyau terminé, le côté CPU copie ce tableau dans la mémoire CPU (ou lit la mémoire unifiée)
  3. CLe programme côté CPU lit comme variables les valeurs que chaque thread a affichées avec printf
Afficher la réponse et l'explication

Réponse : B. Le noyau écrit ses résultats dans un tableau en mémoire GPU et, une fois le noyau terminé, le côté CPU copie ce tableau dans la mémoire CPU (ou lit la mémoire unifiée)

Un noyau GPU est exécuté par de nombreux threads à la fois : il ne peut donc pas renvoyer ses résultats par une seule valeur de retour, et en CUDA le type de la valeur de retour d'une fonction __global__ doit être void. Le côté CPU alloue un tableau en mémoire GPU et en passe le pointeur en argument, et chaque thread écrit son résultat dans l'élément dont il a la charge. Comme le lancement d'un noyau est asynchrone, le côté CPU recopie le tableau avec cudaMemcpy ou une fonction similaire une fois le noyau terminé (dans le même flux, la copie attend la fin du noyau précédent). printf dans un noyau est une aide au débogage destinée à l'affichage, et le programme ne peut pas relire ces valeurs.

S'entraîner sur ce thème Retour au thème

Calculateurs associés

Autres questions sur Programmation GPU

  1. Sur un GPU dont la limite est de 1024 threads par bloc de threads, on lance un noyau CUDA avec blockDim.x égal à 2048. Que se passe-t-il en général ?
  2. On suppose qu'un SM de GPU possède une seule unité d'émission capable d'émettre à chaque cycle les instructions d'un warp. Chaque warp émet de façon répétée 20 cycles d'instructions, puis attend 400 cycles le résultat d'une lecture en mémoire. Si le changement de warp ne prend pas de temps, combien de warps faut-il au minimum pour supprimer le temps d'inactivité dû aux attentes mémoire (masquage de latence) ?
  3. Quelle est la différence de philosophie de conception entre CPU et GPU ?
  4. Quelle est la caractéristique la plus adaptée d'une tâche que le GPU traite rapidement ?
  5. Quel traitement tend à être peu efficace lorsqu'il est exécuté sur GPU ?

Comparatifs sur ce thème