Nvidia GeForce GTX 280 & 260

Publié le 16/06/2008 par
Imprimer
SIMT vs SIMD vs MIMD
Avec les GeForce 8, Nvidia a introduit une architecture en rupture totale avec le passé. Ainsi, fini les énormes unités vectorielles MIMD dont il est parfois difficile de tirer le maximum. Le choix a été fait pour des unités scalaires. Si au niveau de l'implémentation il s'agit d'unités SIMD (comme le SSE) larges de 256 bits (8 x 32 bits), sur le plan fonctionnel, ce n'est pas une instruction de 8 opérations 32 bits qui est appliquée sur 1 thread/élément à chaque cycle, mais bien 1 opération 32 bits sur 8 threads/éléments. Du coup en pratique, pour l'extérieur, ces unités se comportent comme des unités scalaires.

Pour marquer cette différence avec le SIMD (Single Instruction Multiple Data), Nvidia parle de SIMT (Single Instruction Multiple Threads). Si les unités sont similaires, le SIMT permet de maximiser l'utilisation des unités naturellement si la tâche à accomplir est massivement parallèle, comme c'est le cas pour le rendu 3D. L'intérêt étant qu'en SIMT, le programmeur n'a rien à faire pour que ce soit le cas, alors qu'en SIMD, le programmeur et le compilateur doivent s'efforcer de remplir l'unité vectorielle, ce qui n'est pas toujours simple. Le MIMD (Multiple Instructions Multiple Data), tel qu'exploité par AMD dans les Radeon HD 2000/3000 souffre du même problème, même s'il est plus flexible.

Le SIMT n'est bien entendu pas la solution ultime, puisqu'il s'agit toujours de compromis. Plus efficace il est aussi plus gourmand en termes de transistors, de surface sur la puce et de consommation puisqu'il a besoin d'une logique de gestion plus complexe. Le SIMD et le MIMD permettent par contre de placer plus d'unités de calcul dans le GPU, au prix d'une efficacité moindre.

Les GeForce 8 sont ainsi nées avec seulement 128 unités scalaires alors qu'une Radeon HD 3870 contient 64 unités vec5, soit l'équivalent de 320 unités scalaires. L'efficacité supérieure du SIMT n'est bien entendu pas suffisante par rapport à cette différence. Par contre, Nvidia est parvenu à implémenter des unités de calcul de type double pumped, c'est-à-dire fonctionnant à une vitesse double par rapport au scheduler. De quoi cette fois compenser largement, mais au prix d'une réduction de l'efficacité dans les branchements, nous en parleront dans la section qui y est dédiée.


Architecture GeForce 8/9 et GTX 200
Les GeForce 8 et 9 sont équipées d'un certain nombre de blocs d'unités de traitement ou de partitions. Chacune de ces partitions contient 2 multiprocesseurs et 1 bloc d'unités de texturing. Le multiprocesseur est composé d'un scheduler, d'un espace de 8192 registres 32 bits, d'une unité SIMT composée de 8 processeurs scalaires de type FMAD (multiplication et addition flottantes en un seul cycle) et de 2 unités dédiées aux fonctions spéciales (SFU) telles que sin, cos, log… (qui sont donc 4x plus lentes que les instructions simples). Ces 2 unités peuvent également fonctionner à la manière d'un processeur SIMT composé de 8 processeurs scalaires de type FMUL.

Les 2 groupes d'unités (FMAD et SFU/FMUL) peuvent travailler en parallèle puisque les GeForce 8/9 supportent le dual issue. Par contre des limitations semblent exister et il n'est pas facile d'exploiter les unités FMAD et FMUL en même temps. Il est en effet difficile pour le compilateur et pour le scheduler de les utiliser en même temps puisqu'il faut alors que les instructions soient indépendantes et pouvoir accéder à tous les registres nécessaires en même temps. Du coup, la plupart du temps, c'est l'unité FMAD qui se charge des instructions FMUL, seules les fonctions spéciales étant exécutées en dual issue. Cela a évolué avec les pilotes au fil du temps ceci dit.

Sur le plan des unités de texturing, au départ il y avait 4 unités d'adressages et 8 unités de filtrage par partition, capables donc de débiter 4 texels avec filtrage bilinéaire, trilinéaire ou anisotrope 2x. Après le G80, Nvidia a cependant mis à jour légèrement ses puces en rajoutant 4 unités d'adressage supplémentaires. Du coup, les partitions des GeForce 8 suivantes et des GeForce 9 sont capables de débiter 8 texels avec filtrage bilinéaire ou 4 texels avec filtrage trilinéaire ou anisotrope 2x.
Vos réactions

Top articles