C'est ce qui fait que sur la papier, c'est très performant, car les conditions sont calculées à l'avance (en gros, car ce n'est pas aussi simple). Je crois me rappeler que le code assembleur était annoté par le compilateur afin justement de profiter du parallélisme quand c'était possible.
Par exemple, les DSP Texas Instrument de la série 320C6xxx (6201, 6701...) étaient déjà des processeurs VLIW, capables en théorie (j'ai un peu vu le 6201) d'exécuter 8 instructions par cycle d'horloge. Le code ressemblait à ça
mov reg1 reg2
|| add reg3 0x10
|| sub reg1 reg4
add reg4 reg2
...
Les '||' indiquaient que l'instruction de cette ligne était exécutée en parallèle avec l'instruction de la ligne précédente. Il possédait 2 chemins de données (DataPath) et 4 unités d'exécution par chemin de données (2 UAL, 1 pour les sauts et encore une autre, mais je ne me souviens plus exactement), donc, en théorie, on pouvait exéduter 8 instructions à la fois, mais encore fallait-il que les instructions soient bien ordonnées pour pouvoir utiliser les 8 unités à la fois, et sans dépendances de résultat. Car des instructions arithmétiques ne peuvent par exemple être traitées que 4 par 4 (et pas 8 par 8).
Pour l'Itanium, il me semble que c'est encore plus évolué au niveau des annotations dans l'assembleur, justement pour faire faire la parallélisation par le compilo et pas par le programmeur. Mais c'est loin d'être évident, l'Itanium nous le prouve.
[^] # Youpla!
Posté par Jak . En réponse à la dépêche Ca ne va pas fort pour l'Itanium d'Intel. Évalué à 10.
C'est ce qui fait que sur la papier, c'est très performant, car les conditions sont calculées à l'avance (en gros, car ce n'est pas aussi simple). Je crois me rappeler que le code assembleur était annoté par le compilateur afin justement de profiter du parallélisme quand c'était possible.
Par exemple, les DSP Texas Instrument de la série 320C6xxx (6201, 6701...) étaient déjà des processeurs VLIW, capables en théorie (j'ai un peu vu le 6201) d'exécuter 8 instructions par cycle d'horloge. Le code ressemblait à ça
mov reg1 reg2
|| add reg3 0x10
|| sub reg1 reg4
add reg4 reg2
...
Les '||' indiquaient que l'instruction de cette ligne était exécutée en parallèle avec l'instruction de la ligne précédente. Il possédait 2 chemins de données (DataPath) et 4 unités d'exécution par chemin de données (2 UAL, 1 pour les sauts et encore une autre, mais je ne me souviens plus exactement), donc, en théorie, on pouvait exéduter 8 instructions à la fois, mais encore fallait-il que les instructions soient bien ordonnées pour pouvoir utiliser les 8 unités à la fois, et sans dépendances de résultat. Car des instructions arithmétiques ne peuvent par exemple être traitées que 4 par 4 (et pas 8 par 8).
Pour l'Itanium, il me semble que c'est encore plus évolué au niveau des annotations dans l'assembleur, justement pour faire faire la parallélisation par le compilo et pas par le programmeur. Mais c'est loin d'être évident, l'Itanium nous le prouve.