Мне интересно, может ли кто-нибудь проверить мой ответ на этот вопрос, пожалуйста! На следующей неделе у меня промежуточный экзамен, и ТА еще не опубликовал решения по этому вопросу:
Рассмотрим следующий код сборки MIPS и определим все опасности конвейера в предположении, что не реализованы оптимизации конвейера, включая пересылку. Первый столбец чисел - это номера строк, на которые вы можете ссылаться в своем объяснении.
1. addi $3, $0, 100
2. addi $4, $0, 0
3. loop: addi $4, $4, 4
4. add $5, $4, $3
5. sw $5, 100($4)
6. addi $1, $1, -1
7. slt $2, $4, $3
8. bne $2, $0, loop
9. jr $31
Измените порядок следования инструкций, чтобы уменьшить количество стойл до минимума.
Мой ответ:
При переходе от строки 2 к строке 3 (из внешнего цикла внутрь) возникает опасность, потому что 4 доллара, необходимые в строке 3 для добавления, зависят от значения, установленного в 4 доллара в строке 2.
Строка 4 опасна, потому что зависит от значения, установленного для $ 4 в строке 3.
Строка 5 опасна, потому что зависит от значения, установленного для $ 4 в строке 4.
В строке 8 есть опасность, потому что она зависит от значения, установленного для $ 2 в строке 7.
Переупорядоченные инструкции:
addi $4, $0, 0 2
addi $3, $0, 100 1
loop: addi $4, $4, 4 3
addi $1, $1, -1 6
add $5, $4, $3 4
slt $2, $4, $3 7
sw $5, 100($4) 5
bne $2, $0, loop 8
jr $31 9