FAQ CUDA
FAQ CUDAConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 66, dernière mise à jour : 14 juin 2021
Un thread est une instance d'un kernel.
Les threads selon CUDA sont prévus pour être beaucoup plus nombreux que dans d'autres environnements. En effet, un thread GPU effectue des calculs plus précis qu'un CPU, et toujours en parallèle (un thread est prévu pour être exécuté un grand nombre de fois en parallèle, dans une grille).
La conception des threads dérive de celle de la parallélisation des données. En effet, un thread est une portion de code qui s'occupe d'une partie des données, tous les threads ensemble s'occupent de toutes les données parallèles.
Lien : Kernel
Lien : Grille
Lien : Les données parallèles
Une grille est un ensemble bidimensionnel de threads.
La grille est aussi un principe découlant de la parallélisation des données : il s'agit d'une subdivision de la tâche totale à effectuer.
Pour CUDA, une grille ressemble à une image : chaque thread de la grille équivaut à un pixel de l'image, à un point dans le repère cartésien du plan formé par l'image.
Cette subdivision est la plus générale admise par CUDA.
Cette notion peut être utilisée pour dérouler deux boucles imbriquées : au lieu de faire varier deux variables, comme i et j, on fait varier la position dans la grille.
Lien : Thread
Un bloc est un ensemble tridimensionnel de grilles.
Un bloc peut être comparé à une image en 3 dimensions, où chaque point représente une grille, un emsemble de calculs à effectuer.
Il s'agit d'une subdivision découlant du principe de parallélisation des données.
On peut utiliser cette notion pour dérouler trois boucles imbriquées : au lieu de faire varier trois variables, comme i, j et k, on fait varier la position dans le bloc.
Un bloc sera exécuté toujours sur le même multiprocesseur. Ce n'est pas pour autant que tous les threads d'un bloc peuvent communiquer sans problème ! Il faut encore qu'ils soient dans le même warp. Ainsi, ils seront exécutés en même temps.
Lien : Grille
Lien : Multiprocesseur de flux
Un warp est un groupe de 32 threads, qui seront de manière certaine exécutés en deux groupes de 16 threads subséquents, ces demi-warps étant exécutés en même temps.
Ceci fait que, tant que les accès mémoires de ces demi-warps ne se font pas dans les mêmes banques mémoire, il n'y aura pas de conflit. Deux demi-warps n'entreront jamais en conflit de mémoire, ni deux warps.
Lien : Thread
Lien : Banque mémoire
Une banque mémoire est une subdivision de la mémoire globale. Chaque banque a une taille d'un mot (32 bits), et une bande passante de 32 bits : chaque banque peut être lue en un seul cycle.
Une même banque ne peut être accédée qu'en un seul endroit en un cycle. Si plusieurs threads essayent d'accéder à la même adresse mémoire, il n'y aura pas de conflit. Si plusieurs threads lisent à des adresses différentes tombant dans la même banque, il y aura conflit, et les threads seront exécutés dans des cycles différents, d'où une perte, parfois énorme, de performances.