Programmation GPU

Pour traiter sur GPU des données de particules ayant des positions x, y et z, quelle disposition est avantageuse du point de vue de l'accès mémoire coalescé ?

  1. AUn tableau de structures, avec x, y et z groupés par particule
  2. BToutes les valeurs dans un ordre aléatoire
  3. CDes tableaux séparés pour x, pour y et pour z (structure de tableaux plutôt que tableau de structures)
Afficher la réponse et l'explication

Réponse : C. Des tableaux séparés pour x, pour y et pour z (structure de tableaux plutôt que tableau de structures)

Dans un tableau de structures (AoS), les données sont rangées x, y, z de la particule 0, puis x, y, z de la particule 1, etc. ; lorsque chaque thread lit x, les adresses sont espacées de 12 octets. Avec une structure de tableaux (SoA) où les x sont contigus, des threads voisins lisent les x à des adresses voisines et l'accès est coalescé. Pour la même raison, la SoA est aussi souvent avantageuse en SIMD sur CPU.

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

Autres questions sur Programmation GPU

  1. Quelle est la caractéristique de la mémoire partagée (shared memory) en CUDA ?
  2. Quel est le rôle de __syncthreads() en CUDA ?
  3. En CUDA, __syncthreads() est placé dans « if (threadIdx.x < 16) », de sorte que seuls certains threads le franchissent. Que peut-il se produire ?
  4. Quelle est la définition des conflits de banc (bank conflicts) de la mémoire partagée CUDA ?
  5. Un tableau de 32×32 float est placé en mémoire partagée ; sa lecture par colonne (verticalement) par les 32 threads d'un warp provoque des conflits de banc. Quelle contre-mesure est couramment utilisée ?

Comparatifs sur ce thème