FAQ CUDA
FAQ CUDAConsultez toutes les FAQ
Nombre d'auteurs : 1, nombre de questions : 43, dernière mise à jour : 16 juin 2021
CUDA suit, à peu près, le modèle de la parallélisation des données. Chaque thread exécute donc la même opération sur divers éléments des données en parallèle.
Les données sont divisées dans une grille à une ou deux dimensions de blocs.
Les threads d'un même bloc peuvent communiquer grâce à la mémoire partagée.
Chaque bloc peut avoir une, deux ou trois dimensions, et contenir jusqu'à 512 threads, sur le matériel actuel.
Les blocs de threads sont exécutés comme des petits groupes de threads, appelés warps. La taille d'un warp est de 32 threads, et tous les threads d'un warp sont exécutés simultanément.
En général, lors de l'appel à un kernel, on lui précise les emplacements des données à traiter et les emplacements des données une fois traitées.
Dès que les calculs sont effectués, l'hôte récupère les données traitées de ce second emplacement mémoire par une fonction de copie.
Pas encore.
Il est cependant possible de copier les résultats de la mémoire globale vers la texture (les transferts de données sur le périphérique sont très rapides).
Un qualificateur de kernel permet de spécifier l'endroit où il sera exécuté (sur le GPU ou sur le CPU).
Il en existe trois : __global__, __device__ et __host__.
__global__ |
__device__ |
__host__ |
---|---|---|
Exécuté sur le périphérique |
Exécuté sur le périphérique |
Exécuté sur l'hôte |
Appelable de l'hôte |
Appelable du périphérique |
Appelable de l'hôte |
Pas de récursion |
Pas de récursion |
Récursion possible |
Pas de variable statique |
Pas de variable statique |
Variables statiques possibles |
Pas de liste de paramètres variable |
Pas de liste de paramètres variable |
Liste de paramètres variable possible |
Ne peut rien retourner |
Ne peut rien retourner |
Peut retourner une valeur |
Appel asynchrone |
Appel synchrone |
Appel synchrone |
Lien : Appel (a)synchrone
Les textures à une dimension sont limitées à 8000 éléments.
Les textures à deux dimensions sont limitées à 64 000 éléments sur 32 000 éléments.
Les textures à trois dimensions sont limitées à la dimension de 2048 x 2048 x 2048.
Évidemment, ces limites sont tronquées pour respecter les limites de la mémoire du GPU.