Programmation GPU
Un programme qui lance des milliers de fois de suite des noyaux très petits est lent. Quelle amélioration est la plus appropriée ?
- ARéduire le nombre de lancements, par exemple en regroupant (fusionnant) plusieurs petits noyaux en un seul
- BInsérer des temps d'attente entre les lancements de noyaux
- CFixer à 1 le nombre de threads par bloc
Afficher la réponse et l'explication
Réponse : A. Réduire le nombre de lancements, par exemple en regroupant (fusionnant) plusieurs petits noyaux en un seul
Un lancement de noyau entraîne un coût fixe de quelques microsecondes pour le traitement côté CPU et la préparation du GPU. Si le contenu du noyau est plus court, le coût de lancement prédomine. Regrouper plusieurs traitements dans un noyau réduit le nombre de lancements et évite en outre d'écrire puis relire les résultats intermédiaires en mémoire. Des mécanismes enregistrant une séquence de lancements pour l'envoyer en une fois (CUDA Graphs, etc.) sont aussi utilisés.