2012-10-27 5 views

Répondre

2

compte tenu de votre cas:

addi $2, $0, 10 
addi $2, $0, 5 

vous ne rencontrerez jamais un danger de données parce que vous ne lisez une valeur après est en cours d'écriture (lecture après écriture)

peut-être penser comme ça:

$2 = $0 + 10 
$2 = $0 + 5 

vous pouvez voir que $ 2 n'est pas utilisé dans le s Le calcul econd et $ 0 ne sont pas modifiés, donc il n'y a pas de danger pour les données.

si vous deviez le faire:

addi $2, $0, 10 # $2 = $0 + 10 
addi $3, $2, 5 # $3 = $2 + 5 

pipelining ne garantit pas que 2 $ est la valeur attendue quand il est lu au cours du deuxième calcul. Considérons que lw et sw sont également des instructions de type I;

RAW 
    A Read After Write hazard occurs when, in the code as written, one instruction 
    reads a location after an earlier instruction writes new data to it, but in the 
    pipeline the write occurs after the read (so the instruction doing the read gets stale data). 
WAR 
    A Write After Read hazard is the reverse of a RAW: in the code a write occurs after a read, 
    but the pipeline causes write to happen first. 
WAW 
    A Write After Write hazard is a situation in which two writes occur out of order. We normally 
    only consider it a WAW hazard when there is no read in between; if there is, then we have a RAW 
    and/or WAR hazard to resolve, and by the time we've gotten that straightened out the WAW has 
    likely taken care of itself. 

http://www.cs.nmsu.edu/~pfeiffer/classes/473/notes/hazards.html

étant donné que les opérations pour les données de lecture et d'écriture sont des instructions de type I et compte tenu de la définition de ces dangers potentiels de données, oui, des instructions de type I peuvent encore avoir un danger.

+0

Etes-vous sûr que addi n'est pas une instruction de type i? 'addi $ 2, $ 0, 10' a deux registres, $ 2 et $ 0 et un 16 bits immédiatement, 10. –

+0

@ user1687682 oh oui désolé j'ai mal lu. je vais éditer. –

+0

Ok ça a du sens, merci! –