Programmation GPU
Pour construire sur GPU l'histogramme des valeurs de pixels, faire ajouter directement par tous les threads via atomicAdd dans les 256 cases en mémoire globale peut être lent. Quelle méthode l'améliore ?
- AAbandonner atomicAdd et écrire en mémoire globale par une addition ordinaire
- BRéunir les cases en une seule
- CConstruire par bloc un histogramme partiel en mémoire partagée, puis l'ajouter en une fois aux cases en mémoire globale
Afficher la réponse et l'explication
Réponse : C. Construire par bloc un histogramme partiel en mémoire partagée, puis l'ajouter en une fois aux cases en mémoire globale
Lorsque de nombreux threads effectuent simultanément atomicAdd sur la même case, les mises à jour sont traitées une par une, et la mémoire globale étant lente, l'attente s'allonge. Si chaque bloc dispose de son propre histogramme en mémoire partagée, y compte, puis n'ajoute qu'une fois à la mémoire globale, les conflits en mémoire lente se réduisent à nombre de blocs × nombre de cases. Les opérations atomiques en mémoire partagée sont bien plus rapides.