Programmation GPU

Quel est le rôle de __syncthreads() en CUDA ?

  1. ASynchroniser tous les threads du GPU, à travers les blocs
  2. BFaire attendre tous les threads d'un même bloc jusqu'à ce point et rendre visibles les écritures antérieures en mémoire partagée
  3. CSynchroniser les horloges du CPU et du GPU
Afficher la réponse et l'explication

Réponse : B. Faire attendre tous les threads d'un même bloc jusqu'à ce point et rendre visibles les écritures antérieures en mémoire partagée

Dans un traitement utilisant la mémoire partagée, l'écriture d'une valeur par un thread doit être terminée avant qu'un autre thread ne la lise. __syncthreads() fait attendre jusqu'à ce que tous les threads du bloc y soient parvenus, ce qui garantit par exemple que le calcul ne commence qu'une fois que tous ont fini de charger les données en mémoire partagée. Seuls les threads d'un même bloc peuvent être synchronisés ainsi.

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

Autres questions sur Programmation GPU

  1. En CUDA, __syncthreads() est placé dans « if (threadIdx.x < 16) », de sorte que seuls certains threads le franchissent. Que peut-il se produire ?
  2. Quelle est la définition des conflits de banc (bank conflicts) de la mémoire partagée CUDA ?
  3. 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 ?
  4. Lors du calcul d'un produit de grandes matrices sur GPU, pourquoi découpe-t-on les matrices en petites tuiles chargées en mémoire partagée ?
  5. Que peut-il se produire si un noyau GPU utilise trop de registres par thread ?

Comparatifs sur ce thème