Компьютерная организация и дизайн, Дэвид А. Паттерсон и Джон Л. Хеннесси, 5-е издание. Глава 4 и Страница 368
4,18 В этом упражнении мы сравниваем производительность 1 выпуска и 2 выпуска
процессоры, принимая во внимание программные преобразования, которые могут быть сделаны для
оптимизировать для выполнения 2-х выпусков. Проблемы в этом упражнении относятся к следующему циклу
(написано в C):
for(i=0;i!=j;i+=2)
b[i]=a[i]–a[i+1];
При написании кода MIPS предположите, что переменные хранятся в регистрах следующим образом и что все регистры, кроме тех, которые указаны как свободные, используются для хранения различных переменных, поэтому их нельзя использовать ни для чего другого.
i : R5; j : R6; a : R1; b : R2; c: R3; Free: R10, R11, R12
4.18.1 [10] <§4.10> Перевести этот код C в инструкции MIPS. Ваш перевод должен быть прямым, без перестановки инструкций для достижения лучшей производительности.
4.18.2 [10] <§4.10> Если цикл завершается после выполнения только двух итераций, нарисуйте схему конвейера для вашего кода MIPS из 4.18.1, выполненного на процессоре с двумя проблемами, показанном в Рисунок 4.69. Предположим, что процессор имеет идеальный прогноз ветвления и может извлекать любые две инструкции (не только последовательные инструкции) в одном цикле.
4.18.3 [10] <§4.10> Измените код с 4.18.1 для достижения лучшего
производительность на статически запланированном процессоре с двумя выпусками.
4.18.4 [10] <§4.10> Повторите 4.18.2, но на этот раз используйте ваш код MIPS из 4.18.3.
4.18.1)
добавить R5, R0, R0
ПЕТЛЯ: beq R5, R6, EXIT
SLL R10, R5, 2
добавить R3, R10, R1
lw R11, 0 (R3)
lw R12, 0 (R3)
саб R11, R11, R12
добавить R10, R10, R2
sw R11, 0 (R10)
Addi R5, R5, 2
J LOOP
ВЫХОД: нет
4.18.2) Моя таблица для этого вопроса была https://i.imgur.com/e3SeqOy.png и этапы конвейера https://imgur.com/Us518aU. Мой первый вопрос: в цикле 6 необходимы nops? < бр />
Obs: Я рассмотрел следующие типы переадресации:
1) АЛУ-АЛУ
2) MEM-ALU
3) ALU-MEM
4) ALU-ID
И результат ветвления вышел на этапе ID.
Мой второй вопрос: С этими пересылками я могу поместить инструкции с зависимостями, например: ADD R10 , R10, R2 и SW R11, 0 ( R10 ) в последовательных циклах? Мой учитель заметил, что между пакетами последовательных циклов не может быть никакой зависимости.
4.18.3)
добавить R5, R0, R0
ПЕТЛЯ: beq R5, R6, EXIT
SLL R10, R5, 2
Addi R5, R5, 2
добавить R3, R10, R1
lw R11, 0 (R3)
lw R12, 0 (R3)
добавить R10, R10, R2
саб R11, R11, R12
sw R11, 0 (R10)
J LOOP
ВЫХОД: нет