ATI Radeon HD 2900 XT

Publié le 15/05/2007 par
Imprimer
Moi aussi je veux être scalaire
Il y a des modes, c'est comme cela. Nvidia parle de processeurs scalaires, cela fonctionne très bien donc AMD lui emboîte le pas et parle de 320 processeurs scalaires pour son nouveau GPU. Le GeForce 8800 semble ainsi faire petit joueur puisqu'il n'en dispose que de 128. Mais Nvidia et AMD parlent-ils de la même chose ? Pas réellement.


Nous laisserons ici de côté, la vision GPGPU des choses qui avec un peu d'abstraction permet de voir les choses sous un autre angle pour nous concentrer sur l'aspect plus pratique. Un GPU calcule avant tout des vertices et des pixels. Le GeForce 8800 peut calculer 128 de ces éléments en même temps, en décomposant toutes les instructions en instructions scalaires qui vont être exécutées l'une après l'autre.

Le Radeon HD2000 pour sa part va traiter 64 de ces éléments en parallèle mais travaille avec des unités 5D c'est-à-dire capables de traiter non pas une seule instruction mais jusqu'à 5. Pour rappel, un Radeon X1000 peut en traiter 4 par élément pour les pixels shaders et 5 pour les vertex shaders. Le nombre de 5 a donc été choisit pour que les développements passés soient toujours d'actualité. Il s'agit d'une unité vectorielle MIMD 5-way. MIMD signifie, contrairement à SIMD que plusieurs instructions différentes peuvent être traitées en parallèle. C'était déjà le cas auparavant avec la co-issue de type 3+1 (et même 2+2 dans les GeForce 6 et 7). Ici AMD pousse ce concept de co-issue jusqu'à son paroxysme puisque le mode 1+1+1+1+1 est possible et donc bien entendu toutes les autres combinaisons.


Une des 64 unités de calcul du R600. Elle est composée de 5 unités de calcul, dont une capable de prendre en charge les opérations spéciales et d'une unité de traitement des opérations de branchements.

Mais 64x5 est très différent de 320. En effet, ces 5 instructions ne peuvent pas être dépendantes l'une de l'autre. Dans le GeForce 8800 chaque instruction peut être la suite de la précédente. Cela signifie qu'alors que le compilateur du GeForce 8 va casser les opérations vectorielles en opérations scalaires, le compilateur des Radeon HD2000 va faire l'opération inverse et essayer d'assembler des opérations simples entre elles de manière à remplir l'unité MIMD 5D. Ces unités sont ainsi de type VLIW, pour very long instruction word, ce qui signifie que l'instruction envoyé au GPU (qui combine ou plutôt essaye de combiner des instructions plus simples) est longue et complexe : 512 bits ! Ce choix d'architecture permet d'augmenter la densité des unités de calcul mais reporte une grande partie du travail sur le compilateur, ce qui réduit l'efficacité de la puce. Ajoutons à ce sujet qu'il est heureux que Nvidia n'ait pas opté pour ce type d'architecture vu les récents problèmes de drivers !

Concernant les fonctions spéciales (sin, cos, exp, log, etc.) et les opérations sur les entiers 32 bits, du côté GeForce 8 elles sont prises en charge par une unité supplémentaire, qui a cependant un débit effectif 4x plus lent que les autres unités. Du côté d'AMD une des 5 composantes de chaque unité de calcul est capable de traiter ces opérations. Autrement dit, une GeForce 8800 peut traiter 128 opérations classiques + 32 opérations spéciales en même temps alors qu'une Radeon HD 2600 peut traiter 320 opérations classiques ou 256 opérations classiques + 64 opérations spéciales.

L'efficacité supérieure de l'architecture de Nvidia permet-elle de compenser cette différence ? Non. Mais Nvidia a fait appel à une technique qu'Intel avait utilisée avec les ALUs du Pentium 4 : les unités douple pumped c'est-à-dire qui travaillent à double fréquence. Vu de la structure du shader core du GeForce 8800 (675 MHz pour le GeForce 8800 GTX, 1350 MHz étant une simplification), les unités sont capables de traiter 256 opérations classiques + 64 opérations spéciales par cycle… soit des débits identiques à ceux du Radeon HD 2900.

Le Radeon HD 2900 voit donc opposé son débit plus élevé en opérations simples (MAD/MUL/ADD) et sa fréquence supérieure (742 MHz) à une architecture plus efficace.

Concernant l'implémentation, du côté de Nvidia les processeurs scalaires sont groupés par paquet de 8 et traitent des blocs de 32 éléments, 8 par 8, ce qui permet de masquer la latence des unités de calcul. Du côté d'AMD, les unités MIMD 5D sont groupées par paquet de 16 et traitent des blocs de 64 éléments, 16 par 16, pour les mêmes raisons. Par ailleurs chacun de ces groupes d'unités dispose en général de 2 paquets de données à traiter de manière à pouvoir passer de l'un à l'autre et masquer aussi efficacement que possible la latence de traitement.
Vos réactions

Top articles