Programmation GPU

Lors de la transposition d'une grande matrice sur GPU (b[j][i] = a[i][j]), quel est l'objectif principal du passage par la mémoire partagée ?

  1. ADiviser par deux le nombre de calculs de transposition
  2. BTrier les valeurs de la matrice en ordre croissant en mémoire partagée
  3. CLire les tuiles par ligne en accès coalescé, changer leur orientation en mémoire partagée et rendre aussi l'écriture coalescée
Afficher la réponse et l'explication

Réponse : C. Lire les tuiles par ligne en accès coalescé, changer leur orientation en mémoire partagée et rendre aussi l'écriture coalescée

Écrit naïvement, la lecture de a par ligne est coalescée, mais l'écriture dans b se fait par colonne, à des adresses espacées, ce qui ralentit. En chargeant une tuile en mémoire partagée puis en permutant l'affectation des threads pour la relire, lectures et écritures en mémoire globale portent sur des adresses contiguës. On y associe l'allocation d'une colonne supplémentaire pour éviter les conflits de banc lors de la lecture par colonne en mémoire partagée.

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

Autres questions sur Programmation GPU

  1. En CUDA, quel est généralement le comportement juste après le lancement d'un noyau par le programme côté CPU ?
  2. Quelle est la différence de philosophie de conception entre CPU et GPU ?
  3. Quelle est la caractéristique la plus adaptée d'une tâche que le GPU traite rapidement ?
  4. Quel traitement tend à être peu efficace lorsqu'il est exécuté sur GPU ?
  5. Quelle est la définition du « noyau » (kernel) en programmation GPU, par exemple en CUDA ?

Comparatifs sur ce thème