Un concepteur darchitecture de processeur à besoin dimplanter un nouveau processeur pipeliné. En considérant un programme de 106 instructions, et que chaque instruction prend 20 ns pour se terminer, le concepteur se pose les questions suivantes:
a) Combien de temps prendra ce programme sil est exécuté sur un processeur non pipeliné ?
b) Létat de lart actuel montre que 20 étages de pipeline sont envisageables. En supposant le pipeline parfait quel est le facteur daccélération par rapport à un processeur non pipeliné ?
c) Maintenant, il est connu que le pipeline nest pas parfait, et quil introduit des surcoûts par étage de pipeline. Ce surcoût affecte t-il la latence ou le débit, ou les deux ? Justifier.
Bonjour tout le monde!
Pouvez vous m’aidez sur la question b et c ? j’ai un peu du mal a répondre à ces deux questions, bien qu’ayant recherché sur internet, c’est un peu flou pour moi
a) 106 instructions x 20ns = 2120ns
b) 106 instructions x 20ns / 20 pipelines = 106ns
c) il y a deux formes de surcoût:
en entrée du pipeline, la file d’attente d’exécution va être traitée séquentiellement par l’unité de branchement, qui aiguille les instructions vers telle ou telle unité d’exécution.
en sortie du pipeline, si des instructions doivent attendre la fin d’exécution d’autres instructions, il y aura aussi un temps de latence
la latence occasionnée par ces temps d’attente affectera le débit de traitement de chaque instruction, dans un ordre de grandeur qu’il est difficile d’évaluer ici, puisqu’on ne connaît ni les performances de l’unité de branchement, ni les dépendances des instructions entre elles.
regarde sur google "prédiction branchement", ça t'aidera à comprendre (ou pas)
Mon assembleur est rouillé et je n’ai fait que du 8086 et du 68000, jamais du MIPS, mais ça n’a pas l’air très compliqué:
je ne connais pas les registres spécialisés de ce processeur, mais en gros…
le registre $t0 contient la valeur d’une adresse mémoire
charger $t1 depuis l’adresse 0($t0)
charger $t2 depuis l’adresse 2($t0)
tu sauras mieux que moi ce que signifient 0($t0) et 2($t0)
$t3=$t1-$t2
écrire $t3 vers la mémoire en 12($t0)
lire $t4 depuis la mémoire
etc…
tu prends ce bouquin
à chaque ligne, tu te fait un petit tableau où tu écris ce que contient chaque registre,
tu verras apparaître les dépendances entre tes instructions et tu sauras comme ça ce qui peut être exécuté en parallèle et ce qui ne le peut pas.
Bien le lien, je vais regarder plus en détails pour essayer de mieux comprendre. Je suis pas très calé en assembleur moi c’est plutot l’analogique. Je suis en M2 microélectronique