Exercices

Exercice 5 : Processeur à 8 étages

  1. 8 étages, donc 8 instructions simultanées
  2. 8 étages à franchir, un cycle par étage, donc 4 nanosecondes
  3. 1 instruction toutes les 0,5 nanosecondes, soit 2×10⁹ instructions par secondes. L'accélération maximale est de 8.
  4. 1 nanoseconde (deux cycles).
  5. 57 cycles, soit 23,5 nanosecondes (si on suppose qu'il n'y a aucune dépendance).

Exercice 6 : Dépendance de contrôle et de données

  1. Non, car le registre R2 n’est pas modifié dans la ligne 2.
  2. Oui. La valeur de R0 est modifié à la ligne 1, et enregistré quand cette instruction finit l’étape WB de la ligne 1. Or, la ligne 4 sera alors en train de finir l'étape 2, et lira donc la mauvaise valeur (l’ancienne valeur de R0, et non pas la nouvelle).
  3. Oui, n’importe où. Dans ce cas, l’étape 5 de la ligne 1 sera fini avant que l’étape 2 ne commence pour la ligne 4. Il ne restera pas de dépendances de données, car on écrit sur le registre R1 avec quatre instructions de décalage, et pareil pour R2 (il faut bien le vérifier à cause des boucles).
  4. On pourrait soit mettre plusieurs NOP (au moins quatre) juste après le test. Une autre possibilité est de faire de l’anticipation de saut, et de permettre de faire une purge. Ce serait possible ici si on fait de l’anticipation de saut en supposant que le saut ne se fait pas, car le syscall est très facile à rattraper (on suppose qu’il agit au moment de l’étage 5, et il ne fait rien d’autre). Par contre, il faut insérer des NOP après le syscall, pour être sûr qu’aucun effet négatif ne peut arriver en lisant des instructions juste derrière.
  5. Je note A le NOP rajouté dans la boucle et BCDE les instructions derrière le syscall, voici la liste des instructions qui rentrent dans le pipeline : 1A234 5BCDE 1A234 5BCDE (l’instruction 5 sort alors du pipeline et le programme s’arrête). Donc, un temps total de 20 ns pour ces instructions.
  6. 5 ns par instruction : 123412345, soit 45 ns. L’accélération est de 45/20, soit 2,25.