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) ?
- AParce que le nombre d'additions diminue fortement par rapport à une addition séquentielle par un seul thread
- BParce que de nombreux threads peuvent additionner simultanément à chaque étape, ce qui permet de sommer n valeurs en log2 n étapes
- 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.