Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vych_seti_otvety.doc
Скачиваний:
182
Добавлен:
13.03.2015
Размер:
2.29 Mб
Скачать

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

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

Простейшая организация конвейера:

  1. Выборка команды (чтение очередной команды из памяти и занесение ее в регистр команды)

  2. Декодирование команды (определение кода операции и способов адресации операндов)

  3. Вычисление адресов (вычисление адреса операнда)

  4. Выборка операндов (извлечение операндов из памяти. Эта операция не нужна для операндов, находящихся в регистрах)

  5. Исполнение команды (непосредственное выполнение команды)

  6. Запись результата

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

8.Методы адресации, Типы команд и типы данных

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

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

Метод адресации

Пример команды

Смысл команды метода Использование

Регистровая

Add R4,R3

R4(R4+R5 Требуемое значение в регистре

Непосредственная или литеральная

Add R4,#3

R4(R4+3 Для задания констант

Базовая со смещением

Add R4,100(R1)

R4(R4+M[100+R1] Для обращения к локальным переменным

Косвенная регистровая

Add R4,(R1)

R4(R4+M[R1] Для обращения по указателю или вычисленному адресу

Индексная

Add R3,(R1+R2)

R3(R3+M[R1+R2] Иногда полезна при работе с массивами: R1 - база, R3 - индекс

Прямая или абсолютная

Add R1,(1000)

R1(R1+M[1000] Иногда полезна для обращения к статическим данным

Косвенная

Add R1,@(R3)

R1(R1+M[M[R3]] Если R3-адрес указателя p, то выбирается значение по этому указателю

Автоинкрементная

Add R1,(R2)+

R1(R1+M[R2] R2(R2+d Полезна для прохода в цикле по массиву с шагом: R2 - начало массива В каждом цикле R2 получает приращение d

Автодекрементная

Add R1,(R2)-

R2(R2-d R1(R1+M[R2] Аналогична предыдущей Обе могут использоваться для реализации стека

Базовая индексная со смещением и масштабированием

Add R1,100(R2)[R3]

R1( R1+M[100]+R2+R3*d Для индексации массивов

Типы команд

Команды традиционного машинного уровня можно разделить на несколько типов

Тип операции

Примеры

Арифметические и логические

Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т.д.

Пересылки данных

Операции загрузки/записи

Управление потоком команд

Безусловные и условные переходы, вызовы процедур и возвраты

Системные операции

Системные вызовы, команды управления виртуальной памятью и т.д.

Операции с плавающей точкой

Операции сложения, вычитания, умножения и деления над вещественными числами

Десятичные операции

Десятичное сложение, умножение, преобразование форматов и т.д.

Операции над строками

Пересылки, сравнения и поиск строк

Команды управления потоком команд

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

  1. Классы конфликтов возникающих в конвейерах и способы их устранения

Существуют три класса конфликтов:

  1. Структурные конфликты, которые возникают из-за конфликтов по ресурсам, когда аппаратные средства не могут поддерживать все возможные комбинации команд в режиме одновременного выполнения с совмещением Чтобы разрешить эту ситуацию, можно просто приостановить конвейер на один такт, когда происходит обращение к памяти за данными. Подобная приостановка часто называются "конвейерным пузырем" (pipeline bubble) или просто пузырем, поскольку пузырь проходит по конвейеру, занимая место, но не выполняя никакой полезной работы.

  2. Конфликты по данным, возникающие в случае, когда выполнение одной команды зависит от результата выполнения предыдущей команды. Проблема может быть разрешена с помощью достаточно простой аппаратной техники, которая называется пересылкой или продвижением данных (data forwarding), обходом (data bypassing), иногда закороткой (short-circuiting). Результат операции АЛУ с его выходного регистра всегда снова подается назад на входы АЛУ. Если аппаратура обнаруживает, что предыдущая операция АЛУ записывает результат в регистр, соответствующий источнику операнда для следующей операции АЛУ, то логические схемы управления выбирают в качестве входа для АЛУ результат, поступающий по цепи "обхода", а не значение, прочитанное из регистрового файла. Эта техника "обходов" может быть обобщена для того, чтобы включить передачу результата прямо в то функциональное устройство, которое в нем нуждается: результат с выхода одного устройства "пересылается" на вход другого, а не с выхода некоторого устройства только на его вход.

Известны три возможных конфликта по данным в зависимости от порядка операций чтения и записи. Рассмотрим две команды i и j, при этом i предшествует j. Возможны следующие конфликты:

  • RAW (чтение после записи) - j пытается прочитать операнд-источник данных прежде, чем i туда запишет. Таким образом, j может некорректно получить старое значение. Это наиболее общий тип конфликтов, способ их преодолениямеханизм «обходов»

  • WAR (запись после чтения) - j пытается записать результат в приемник прежде, чем он считывается оттуда командой i, так что i может некорректно получить новое значение.

  • WAW (запись после записи) - j пытается записать операнд прежде, чем будет записан результат команды i, т.е. записи заканчиваются в неверном порядке, оставляя в приемнике значение, записанное командой i, а не j. Этот тип конфликтов присутствует только в конвейерах, которые выполняют запись со многих ступеней (или позволяют команде выполняться даже в случае, когда предыдущая приостановлена).

  1. Конфликты по управлению, которые возникают при конвейеризации команд переходов и других команд, которые изменяют значение счетчика команд.

Конфликты в конвейере приводят к необходимости приостановки выполнения команд (pipeline stall).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]