Programmation GPU
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 ?
- ALe GPU le découpe automatiquement en deux blocs de 1024 threads et les exécute
- BSeuls les 1024 premiers threads s'exécutent et les autres sont ignorés
- CLa configuration de lancement est considérée comme invalide : le noyau ne s'exécute pas et une erreur est renvoyée
Afficher la réponse et l'explication
Réponse : C. La configuration de lancement est considérée comme invalide : le noyau ne s'exécute pas et une erreur est renvoyée
Tous les threads d'un bloc de threads doivent résider simultanément sur un même SM et pouvoir coopérer par la mémoire partagée et __syncthreads() ; le nombre de threads par bloc est donc limité. Si l'on lance un noyau avec une configuration qui dépasse la limite, aucun thread ne s'exécute et le lancement échoue avec une erreur signalant une configuration invalide. Le lancement d'un noyau ne renvoie pas de valeur : sans vérifier l'erreur avec cudaGetLastError() ou une fonction similaire, on risque de ne pas remarquer que le tableau des résultats n'a jamais été mis à jour. Un travail pour 2048 threads se répartit entre plusieurs blocs de 1024 threads ou moins.