Sur de tels processeurs, une instruction va s'appliquer à un ensemble de données, appelé vecteur. Une seule instruction va donc exécuter la même opération de façon parallèle sur tout le vecteur. Ce genre d'architecture est efficace pour les applications de calcul scientifique et s'est notamment trouvée dans les superordinateurs comme les Cray.
Les pipelines provoquent de nouveaux problèmes, en particulier d'interdépendance, ils ne sont pas tous listés ci dessous, juste deux cas simples sont abordés.
Une instruction ne peut récupérer le résultat de la précédente car celui-ci n'est pas encore disponible. Ainsi, la séquence :
ADD R1, R2, R3 // R1 = R2 + R3 STORE R1, 1000 // C(1000) = R1
Ne stocke pas à l'emplacement mémoire 1000 la valeur de R1 contenant la somme R2 + R3, mais la valeur de R1 contenue avant l'instruction ADD. Pour résoudre ce problème particulier, il est parfois possible de créer des courts-circuits pour amener le résultat de l'étape précédente vers l'unité qui en a besoin directement, sans passer par les registres de pipeline.
Se pose le même problème avec les sauts :
MOV R1, #1000 // R1 = 1000 JUMP R1 // Saut inconditionnel
R1 ne contient pas encore la valeur 1000 au moment où l'instruction de saut va s'exécuter.
Une solution possible à ces deux problèmes est d'insérer une instruction entre les deux qui sont interdépendantes. Prenons par exemple la séquence suivante :
1: A = B + C 2: D = A + C 3: E = F + B
qui comporte une dépendance directe simple, A ne pouvant être disponible pour la partie droite de la seconde instruction.
1: A = B + C 1b: NOP 2: D = A + C 3: E = F + B
1: A = B + C 2: E = F + B 3: D = A + C
Aujourd'hui tous les microprocesseurs sont pipelinés :
Processeur | Profondeur du pipeline |
---|---|
Intel Pentium 4 Prescott | 31 |
Intel Pentium 4 | 20 |
AMD K10 | 16 |
Intel Core 2 Duo | 14 |
Intel Pentium II | 14 |
AMD Opteron 1xx | 12 |
Intel Pentium III | 10 |
AMD Athlon | 12 |
PowerPC G4 (PPC 7450) | 7 |
IBM POWER4 | 12 |
IBM POWER5 | 16 |
IBM PowerPC 970 | 16 |
Sun UltraSPARC IIi et UltraSPARC IV | 14 |
Intel Itanium | 10 |
MIPS R4400 | 8 |