В MIPS может ли инструкция I-типа вызвать опасность?

Я знаю, что последовательные инструкции R-типа могут вызвать опасность, например:

add $2, $2, $1
add $2, $2, $3

а можно последовательные инструкции I-Type? Например:

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

person Jason Pather    schedule 27.10.2012    source источник


Ответы (1)


учитывая ваш случай:

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

вы никогда не столкнетесь с опасностью данных, потому что вы никогда не читаете значение после его записи (чтение после записи)

возможно, подумайте об этом так:

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

вы можете видеть, что 2 доллара не используются во втором вычислении, а 0 долларов не изменяется, поэтому опасности для данных нет.

если бы вы сделали это:

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

конвейерная обработка не гарантирует, что $2 будет ожидаемым значением при чтении во время второго вычисления.

учтите, что lw и sw также являются инструкциями 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

учитывая, что операции чтения и записи данных являются инструкциями I-типа и учитывая определение этих потенциальных опасностей данных, да, инструкции I-типа все еще могут представлять опасность.

person Alex Lynch    schedule 27.10.2012
comment
Вы уверены, что addi не является инструкцией i-типа? addi $2, $0, 10 имеет два регистра, $2 и $0, и 16-битный непосредственный регистр 10. - person Jason Pather; 27.10.2012