CUDA

3      CUDA : Technologies logicielles et matérielles

Les calculs demandés à CUDA sont effectués sur les unités de shaders, les processeurs les plus rapides sur les GPU. Par exemple, les Geforce 8800 GTX ont des unités cadencées à 1.2 Ghz.

Détail d'une unité de shaders
Détail d'une unité de shaders

Comme nous pouvons le constater sur la Figure 13, une unités de shaders de NVidia est composée de plusieurs clusters nommés Texture Processor Cluster.
Une carte Geforce 8800 GTX, par exemple, est composée de huit clusters.
Chaque cluster regroupe en fait une unité de traitement des textures (TEX) et deux unités de traitement de flux (SM pour Streaming Multiprocessors). Ces processeurs sont composés :

–       d’un front-end de lecture/décodage et lancement des instructions

–       d’un back-end composé d’un ensemble de huit processeurs de flux (SP) et deux unités spéciales (SFU), au niveau desquels les instructions sont exécutées de façon SIMD : la même instruction est appliquée à tous les threads du warp. NVIDIA a baptisé ce mode d’exécution SIMT (Single Instruction Multiple Threads).

Les processeurs de flux vont toujours par paire dans un SM. Chacun des SP est accompagné d’un fichier de registres (Register File) constitué de 1024 registres de 32 bits.
Un SP peut exécuter une instruction par cycle. Ces instructions sont de type MAD : addition et multiplication ou bien de conversions.

Une unité superfonctionelle (SFU) est toujours associée à 4 SP.
Un SFU effectue une opération sur quatre cycles. Ces opérations peuvent être des opérations trigonométriques (sinus, cosinus), logarithmiques (en base 2), etc.

Parmi tous les éléments des TPC, seuls les SP et SFU effectuent réellement des calculs.

Il est important de signaler que le back-end fonctionne à une fréquence double de celle du front-end.
En pratique, la partie qui exécute les instructions apparait donc deux fois « plus large » qu’elle ne l’est (c’est-à-dire comme une unité SIMD 16 voies au lieu de 8 voies).
Le mode de fonctionnement des streaming processors est le suivant : à chaque cycle un warp prêt à être exécuté est sélectionné par le front-end, qui lance l’exécution d’une instruction. Pour appliquer l’instruction à l’ensemble des 32 threads du warp, le back-end mettra quatre cycles, mais comme il fonctionne à une fréquence double du front-end, il ne sera exécuté que de deux cycles de son point de vue.
Pour éviter que le front-end ne reste inutilisé, pendant plusieurs cycles, il faut donc maximiser l’utilisation du hardware. L’idéal est d’alterner le types d’instructions de tous les cycles : un cycle avec une instruction classique, suivi d’un autre avec une instruction de type SFU.

Chaque multiprocesseur dispose également d’un certain nombre de ressources qu’il est utile de connaitre afin de les utiliser au mieux. Ainsi ils sont équipés d’une petite zone de mémoire appelée Shared Memory, d’une taille de 16 Ko par multiprocesseur. Cette mémoire n’est pas une mémoire cache : sa gestion est entièrement à la charge du programmeur. Cette spécificité est particulièrement intéressante et traduit le fait que CUDA est bien un ensemble de technologies logicielles et matérielles.

Cette shared memory offre un moyen de communication aux threads d’un même bloc.

6 réflexions sur « CUDA »

  1. Bonjour,
    je souhaite savoir quels sont les outils et comment faire les configurations s’il y a lieu de faire, à fin programmer en java en utilisant CUDA?
    j’ai un windows xp pack2
    carte graphique NVIDIA GeForce Go 7300
    1 Go de RAM
    merci à l’avance.
    Cordialement.

  2. Bonjour, il y a une faute en première page, je cite :
    « le code devant s’exécuter sur le GPU est en fait exécuté sur le GPU »
    -> est en fait exécuté sur le CPU.

    Voila merci pour l’article sinon 🙂

  3. pouvez vous nous indiquer les étapes à suivre pour utiliser cuda avec Visual studio 2010 ou bien 2008 et merci d’avance

Laisser un commentaire