Rien de tel que des schémas, mais j'en ai pas sous la main
Quelques définitions...
SIMD: Single Instruction Multiple Data. On balance 1 instruction et on traite plusieurs données regroupées en paquet avec. Avantages: économique en transistors et bande passante/latence, permet théoriquement de multiplier largement le débit. Inconvénients: nécessite d'avoir un nombre important de données à traiter de la même façon, nécessite des données en paquets. Exemples: MULPD (SSE), exécutée après un PACK (SSE/3DNow).
VLIW: Very Long Instruction Word. Approche différente pour un résultat proche. Cette fois on a toujours 1 seule instruction pour plusieurs données, mais l'instruction peut être la composition de n'importe quelles instructions sur un nombre défini d'unités. Avantages: quelles que soient les instructions, elles sont généralement parallélisables. Inconvénients: plus complexe du fait du nombre d'instructions existantes. Utilisé de façon transparente dans des CPU.
L'idéal se situant à mon avis (ça n'engage que moi) entre les deux types d'archis, à savoir un processeur VLIW en interne capable de trouver du parallélisme dans le code et de réorganiser tout ça. C'est l'approche utilisée par AMD sur les K7/K8 mais la largeur est réduite, K10 devrait corriger un peu ça en la doublant, arrivant à la même largeur que Core (Conroe), mais ça reste "étroit".
Pour schématiser le fonctionnement VLIW, on peut représenter 3 bus: adresse 1, adresse 2 et instruction, un peu comme la base même d'un CPU à ceci près que la taille du bus d'instructions est fixe et d'autant plus grande que le nombre d'unités de calcul est important. Un CPU ne faisant que + et - par exemple se contenterait de 2 bits par unité de calcul: 00 étant l'instruction "no operation", 01 étant "+", 11 étant "-" et 10 étant "complément à 2". Quand on voit que K10 a une largeur de 3x128bits pour la FPU uniquement, on arrive à un maximum de 12 unités de calcul (4x32 par unité si on les sépare, mais il me semble que ça n'est pas fait), et tout ça sur un nombre d'instructions conséquent, ça peut donner une idée de la complexité de mise en oeuvre...
Un GPU présente peu ou prou les mêmes caractéristiques mais exploite nettement plus d'unités de calcul: de 12 au sein de K10, on passe à 120 pour un RV630 (voir R600), 160 pour un G80 (128 "généralistes" + 32 "spéciales" techniquement, regroupées en 8 blocs de 16+4 unités SIMD) et 320 pour un R600 (généralistes, dont 64 capables d'opérations "spéciales", regroupées en 8 blocs de 8 unités SIMD où chaque instruction est sous le format VLIW sur 5 données), tout ça sans compter les opérations de branchement.
La principale nuance entre CPU et GPU, c'est le type de données traitées, qui change radicalement la donne: un CPU traite tout et n'importe quoi et doit souvent le faire en priorité "temps réel", un GPU traite une quantité colossale de données à la chaîne, avec une tolérance sur la latence globalement élevée (on a besoin d'1 image tous les 1/60e de secondes, un pixel peut attendre le dernier moment pour être calculé, soit plusieurs milliers de cycles -> recherche de parallélisme facilitée). Ce qui fait que le R600 est un gros raté, à mon avis toujours, c'est tout simplement qu'AMD ou ATI, peu importe, a décidé de "généraliser" la puce, son comportement vis-à-vis de la latence est radicalement différent de ce qu'a choisi nVidia et il est "castré" au niveau de tout ce qui est réellement rendu 3D, les fameux "autres cores", qu'AMD semble être bien parti pour séparer physiquement.
Alors oui, on risque donc de voir des GPU multi-cores arriver, mais sans aucun rapport avec les CPU multi-cores, simplement un remake de ce qu'on avait pu voir chez 3DFX de sorte à simplifier la conception, réduire les coûts et diminuer le cycle de renouvellement. Le fond de ma pensée étant: quel intérêt de concevoir plusieurs puces utilisant les mêmes éléments (shader core, TMU, ROPs) si on ne peut pas réutiliser les masques? Actuellement, tout est dans le même die et nécessite donc 1 masque par gpu, alors qu'il serait si "simple" de faire non pas 1 masque par GPU mais 1 masque par élément de GPU... (RV610, RV630, R600 -> shader core 8x5, TMU 4x4 + ROPs 1x4, de 3 masques pour 3 GPU on passe à 2 voire 1 seul pour un nombre virtuellement infini de déclinaisons possibles tout en diminuant la surface et donc la probabilité de défaut principalement sur le haut de gamme)
Message édité par Gigathlon le 26-08-2007 à 16:25:22