Programmation GPU

Pour calculer sur GPU la somme d'un grand nombre de valeurs, pourquoi utilise-t-on une réduction en arbre (répétition de l'addition de voisins qui divise par deux le nombre de valeurs) ?

  1. AParce que le nombre d'additions diminue fortement par rapport à une addition séquentielle par un seul thread
  2. BParce que de nombreux threads peuvent additionner simultanément à chaque étape, ce qui permet de sommer n valeurs en log2 n étapes
  3. CParce que l'erreur en virgule flottante devient toujours nulle
Afficher la réponse et l'explication

Réponse : B. Parce que de nombreux threads peuvent additionner simultanément à chaque étape, ce qui permet de sommer n valeurs en log2 n étapes

Une addition séquentielle par un seul thread demande n-1 étapes ; en arbre, n/2 threads additionnent des voisins à la première étape, n/4 à la deuxième, etc., et le calcul se termine en log2 n étapes. Le nombre total d'additions est inchangé, mais le faible nombre d'étapes permet un calcul parallèle rapide. Au sein d'un bloc, les étapes se déroulent en mémoire partagée, et les résultats des blocs sont finalement sommés.

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

Autres questions sur Programmation GPU

  1. Combien d'étapes faut-il pour sommer 1024 valeurs par une réduction en arbre ?
  2. 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 ?
  3. 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 ?
  4. Pourquoi le transfert vers le GPU est-il plus rapide lorsque la mémoire CPU est épinglée (verrouillée en pages) ?
  5. Quel est l'objectif principal de l'utilisation de plusieurs flux (streams) CUDA ?

Comparatifs sur ce thème