Архитектура В. С. Lab2. Моделирование работы конвеера

Цель работы

Знакомство с понятием конвейера, его местом и роли в современных высокопроизводительных системах. Оценка выигрыша от применения конвейера.

Задание на лабораторную работу

Программно реализовать модель работы конвейерной системы, спецификация которой дана ниже. Оценить работу модели.

Общее описание

Система состоит из процессора с конвейерным устройством исполнения команд. Число ступеней конвейера — пять, время длительности выполнения каждой ступени одинаково и равно одному такту синхронизации конвейера. На каждой из ступени конвейера выполняются следующие действия:

  1. IF — выборка команды (по адресу, заданному счетчиком команд,
    из памяти извлекается команда)
  2. ID — декодирование команды и выборка операндов из регистров, если необходимо
  3. EX — выполнение операции или вычисление эффективного адреса памяти, если операнд загружается или сохраняется в памяти
  4. MEM — чтения операнда из памяти
  5. WB — запоминание результата в регистрах или в памяти

Заметим, что для некоторых команд необходимы не все ступени. На таких ступенях, команда простаивает.

Регистровый файл состоит из 8 32-разрядных регистров общего назначения (r0…r7), счетчика команд PC. Объем оперативной памяти — по усмотрению студента.

В системе присутствуют все необходимые функциональные блоки, необходимые для исполнения приведенных ниже команд. Устройство выборки допускает одновременный выбор и команд, и данных из памяти. Для устранения конфликта по данным используется механизм «закоротки» и приостановки конвейера. Для устранения конфликта по управлению используется механизм перезапуска конвейера.

Система команд

Все операнды целочисленные.

По умолчанию все команды занимают один такт на каждой ступени конвейера.

Мнемоника Краткое описание
Команды чтения/записи
1 LW Ri, (Rj) загрузить из памяти по адресу, указанному в регистре Rj, 32-разрядное слово в регистр Ri
2 SW (Ri), Rj сохранить в памяти по адресу, указанному в регистре Ri, 32-разрядное слово из регистра Rj
3 MOV Ri, Rj Ri ¬ Rj
Арифметические и логические операции

(op1, op2 — либо регистр, либо константа, в качестве обеих операндов константы выступать не могут)

1 ADD Ri, op1, op2 Ri ¬ op1 + op2
2 SUB Ri, op1, op2 Ri ¬ op1 — op2
3 MUL Ri, op1, op2 Ri ¬ op1 * op2 (время выполнения — 3 такта)
4 DIV Ri, op1, op2 Ri ¬ op1 / op2 (целочисленное деление, время выполнения — 3 такта)
5 AND Ri, op1, op2 Ri ¬ op1 AND op2 (поразрядное)
6 OR Ri, op1, op2 Ri ¬ Rj OR Rk (поразрядное)
7 XOR Ri, op1, op2 Ri ¬ Rj XOR Rk (поразрядное)
8 NOT Ri инвертирование всех разрядов регистра Ri
Команды передачи управления

(Li — номер строки)

(реализовывать необязательно)

1 JMP Li PC = Li
2 LOOP Li, Rj if (Rj == 0) then
PC++;
else
{
Rj—;
PC = Li
}
Прочие команды
1 NOP пустая операция

Требования к пользовательскому интерфейсу программы

Внешний вид программы должен отображать текущее состояние системы: номер такта процессора, содержимое конвейера (какие команды на какой ступени исполняются), содержимое счетчика команд и регистров, содержимое памяти и т.п.

Программа должна допускать ввод пользователем произвольной программы из команд приведенной выше системы команд, и запуск на выполнение введенной программы. Программа должна допускать пошаговое выполнение пользовательской программы с обновлением состояния системы в конце каждого шага.

Модель должна диагностировать все возможные возникающие конфликты и устранять их с выводом соответствующих сообщений.
В конце выполнения пользовательской программы модель должна выводить потраченное на выполнение число тактов конвейера, число тактов, которое понадобилось бы при неконвейерной организации, и коэффициент выигрыша от применения конвейера.

Возможные дополнения.

  • фиксирование результатов выполнения последней команды в регистре флагов;
  • расширение системы команд, например, командами условного перехода;
  • введение динамической оптимизации потока команд для минимизации потерь от конфликтов по данным;
  • применение в качестве механизма устранения конфликта по управлению более совершенного и т.п.

ВЫПОЛНЕНИЕ

Разработка интерфейса

На экране каким-то образом необходимо отобразить состояние регистров, памяти, программу и состояние конвейера.

Для отображения памяти и регистров наиболее подходящим является таблицы.

Для отображения текста программы вполне подходит текстовое поле.

Разработка структуры программы

Поскольку моделируется конвейер, то проще всего для каждого этапа конвейера написать отдельную процедуру DoIF, DoID, DoEX, DoMEM, DoWB.

Разработка структуры данных

Для хранения данных регистров и памяти естественно лучше всего подходит массив, а для хранения команды был написан следующий класс:

 

Command — команда.

Поскольку максимальное количество операндов 3, то массив Operands имеет размер 3. Он хранит значения операндов.

WhoConst — только один операнд может быть константой. Если WhoConst>0, то элемент массива Operands[WhoConst] является константой, иначе номер регистра.

CountOfOperands — количество операндов. Поскольку команды имеют различное число операндов. С помощью этого поля можно однозначно узнать количество задействованных элементов массива Operands.

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

Текст основной части программы

ВЫВОД

Модель была протестирована на следующей программе:

Результат – коэффициент выигрыша 1,5.

Следовательно конвейеризация является эффективным средством увеличения производительности.

Скачать архив с исходными кодами программы

Обратите внимание на каталог EX1EX2EX3. Я сейчас точно не могу вспомнить, что это такое, но скорее всего это было задание при защите лабораторной работы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *