Forum Clubic

Aide exercice de processeurs

Un concepteur d’architecture de processeur à besoin d’implanter 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 s’il est exécuté sur un processeur non pipeliné ?

b) L’état de l’art actuel montre que 20 étages de pipeline sont envisageables. En supposant le pipeline parfait quel est le facteur d’accélération par rapport à un processeur non pipeliné ?

c) Maintenant, il est connu que le pipeline n’est pas parfait, et qu’il 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

Je vous remercie d’avance

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)

Bonjour frr,

Tes réponses confirment mes doutes,

j’avais trouvé la meme chose sauf pour la derniere question dont je connaissais pas la réponse.

Merci beaucoup a toi!


Lw $t1,0($t0) Lw $t2,4($t0) Sub $t3,$t1,$t2 Sw $t3,12($t0) Lw $t4,8($t1) Add $T5,$t1,$t4 Sw $t5,16 ($t0)

J’en profite pour une dernière question, quel aléa est présent dans le programme ci dessus?

Je pense qu’il y a 2 aléas de données (dépendances des données entre lw et sub, lw et add) ?

insertion de bulles pour supprimer cet aléa?

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.

Tu fais quoi comme études ?

salut,

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

Merci pour tes infos

Wow

Chapeau frr ! :jap:

C’est la que je vois qu’il m’en reste beaucoup a apprendre ! ah ah ah !

Comme dirais Maître Yoda:
“Ce que tu as appris peut te sauver”
:jap: