2016-12-02 4 views
0

Il y a 5 étapes dans le pipeline.Comment l'instruction après charger, exécuter?

IF - Instruction fetch 
ID - Instruction Decode, read the register 
EX - On a memeory reference add up base and offset, 
     and for arithmetic instruction do the math. 
MEM - If load or store access memory 
WB - Place the result in appropriate register.  



I1 : R0 <- M[loc]  IF | ID | EX | MEM | WB | 

I2 - R0 <- R0 + R0     | IF | ID | EX | MEM | WB | 

I3 - R2 <- R2 - R0      | IF | ID | EX | MEM | WB | 

Considérons que "Opérande Forwarding" a été utilisé.
Solution dit: -

Instruction I1 est une instruction Load. Donc l'instruction suivante (I2) ne peut pas aller jusqu'à ce que I1 termine son étape EXE.

Mais je pense: dans MEM étape, le processeur accède à la mémoire et choisit le mot désiré. Et dans WB étape il met à jour le registre du registre.
Donc, jusqu'à MEM stade le processeur détient le contrôle de la mémoire, de sorte que I2 va commencer à chercher après MEM de I1.

Lequel est correct?

La description des étapes n'a pas été donnée, il est écrit à ma connaissance.

+0

J'ai modifié votre question. Si vous trouvez mes modifications désagréables, vous pouvez les annuler en utilisant le bouton "modifier" en bas à gauche. –

Répondre

1

Convention:

Je une instruction générique désignent.
I1, I2, I3, ... indiquent des instructions spécifiques. S désignent un étage générique du pipeline.
IF, ID, EX, MEM, WB représentent un des stades spécifiques du pipeline.
I.S désigne le cycle dans lequel l'instruction I était à l'étape S.

L'instruction I2 a besoin mais R0 registre ne sera pas prêt à partir I1 jusqu'à I1.WB a terminé, en supposant un pipeline de base.
Avec présent renvoi d'opérandes, I2 peut lire le résultat en I1 est écrire de nouveau dans le fichier de registre, qui est au cours I1.WB.

Depuis l'opérande est lu dans le ID étape, I2.ID et I1.WB doit se faire en même temps.
Cela signifie que I2.IF doit se produire en même temps de I1.MEM.


Vous êtes maintenant à juste titre sceptiques quant à la capacité de la CPU à effectuer deux lectures (une pour l'extraction d'instructions et une pour la charge) dans la même horloge.
CPU très simples se bloque réellement sur un tel conflit (dans votre exemple le I2.IF se produirait à I1.WB).

L'approche la plus simple pour éviter un décrochage est la Harvard architecture, où la CPU récupère les instructions à partir d'une mémoire différente.

L'architecture Harvard has been modified grâce à l'utilisation de caches et pré-extraction des données et des instructions.
Dans ce contexte, un décrochage se produit uniquement si la charge et la récupération d'instruction doivent accéder à la mémoire (et non aux caches).

Les architectures de bureau modernes disposent d'un cache de données L1 qui peut gérer plus d'un accès à la fois et le CPU est étroitement couplé avec eux de sorte que deux ou plusieurs charges/magasins peuvent être exécutés en même temps, en parallèle L1 instruction cache.

Enfin, certaines des processeurs modernes décodent plus d'une instruction à la fois, ce qui réduit le problème de décrochage (mais ne l'élimine pas).
C'est le cache qui offre le plus grand avantage en évitant les stalles.

+0

J'ai compris votre point. Je vous remercie ! – Tushar