Автор: Пользователь скрыл имя, 09 Ноября 2011 в 22:35, доклад
Процессор - устройство, осуществляющее процесс автоматической обработки
данных и программное управление этим процессом. Процессоры можно классифици-
ровать, например, по следующим признакам:
Операционная часть ARC соответствует операционной части М-процесора.. Работу
процессора
коротко можно
Машинный цикл выполнения команды в общем случае (не для рассматриваемого про-
цессора) включает:
1. Извлечение команды из памяти (IF - Instruction Fetch).
2. Декодирование команды (Instruction Decoding - ID).
3. Извлечение операндов из памяти или из регистров (MEM).
4. Выполнение (Execute - EX).
5. Запись результатов в память или регистр (Write Back - WB).
Для данного процессора обращение к памяти (MEM) и (WB) происходят только в 2
командах - ld и st. В остальных случаях все действия происходят с регистрами РОН. По-
скольку у процессора ARC нет отдельного адресного операционного устройства, а режи-
мы адресации предусматривают в том числе и косвенную адресацию, то этап выполнения
EX в нем предшествует этапу обращения к памяти (MEM или WB) - на этом этапе необ-
ходимо вычислить окончательный адрес памяти, по которому будет обращение. В резуль-тате среднее число тактов на команду (clocks per instruction - CPI) -около 3-4 на команду,
и, кроме того, 1 загрузка команды из памяти. Производительность этого процессора
можно оценить следующим образом. Среднее время выполнения (в тактах) :
Tк = 3t+ 1,5tmem,
где t - длительность одного такта процессора, = tmem - длительность обращения к
памяти. При тактовой частоте 100Мгц t=10нс. Пусть время обращения к памяти со-
ставляет даже 20нс. Получаем Тк = 3*10нс + 1,5*20нс = 60нс. Производительность = 1/Тк
= 1/60нс = менее 20 МIPS. Производительность этого процессора можно оценить следующим образом. Среднее
время выполнения (в тактах) :
59
Tк = 3t+ 1,5tmem,
где t - длительность одного такта процессора, = tmem - длительность обращения к
памяти. При тактовой частоте 100Мгц t=10нс. Пусть время обращения к памяти со-
ставляет даже 20нс. Получаем Тк = 3*10нс + 1,5*20нс = 60нс. Производительность = 1/Тк
= 1/60нс = менее 20 МIPS. Показатели производительности многих современных процес-
соров (и RISC и CISC) даже на той же частоте намного выше. (Например, Celeron
400 Мгц имеет производительность около 1000 MIPS - на частоте 100 МГц он бы имел
производительность 250MIPS, то есть в 10 раз больше, чем у рассмотренного процессо-
ра). Как достигается повышение производительности ? Во-первых, можно несколько
улучшить показатель CPI, если перейти к жесткой логике управления, то есть вместо
микроподпрограммы выполнения команды реализовать аппаратную схему, выпол-
няющую алгоритм заданной команды.
С другой стороны, можно использовать КЭШ-память для ускорения доступа к основ-
ной памяти. Однако, этих мер недостаточно для повышения производительности в 10 и
более раз.
В современных
процессорах для повышения
числе, 2 основных подхода: конвейеризацию команд и суперскалярное выполнение ко-
манд (многопотоковые конвейеры команд).
4.5.3 Конвейер команд
В общем случае приведенные ранее основные пять этапов выполнения команды про-
цессора общего назначения требуют разного времени, но -сопоставимого. Если добиться
(введением фиксаторов и синхронизацией), чтобы каждый этап занимал одинаковое вре-
мя, можно организовать конвейер команд, в котором одновременно на разных этапах вы-
полнения будут находиться несколько команд (Рис.4.9).
Рис. 4.9. Даже при условии некоторого увеличения времени выполнения одной команды (не-
большое снижение быстродействия) производительность при полном заполнении конвей-
ера будет близка к величине 1/Tк, где Tк - такт конвейера, в данном случае - время выпол-
нения одного этапа. Это позволило бы сразу увеличить производительность процессора в
5 раз ! Однако на практике добиться этого оказывается сложно. И препятствуют этому так
называемые конфликты при конвейеризации.
60
Конфликтом при конвейеризации команд называют ситуацию, которая препятствует
выполнению очередной команды из потока команд в предназначенном для нее такте.
Конфликты делятся на три основные группы:
1. Структурные или ресурсные.
Возникают в результате того, что аппаратные средства не могут поддерживать все
комбинации команд в режиме их одновременного выполнения с совмещением на конвей-
ере. Это происходит в случае, если какие-то устройства в процессоре не конвейеризованы,
либо - присутствуют в единственном экземпляре (не распараллелены). Например, могут
возникать конфликты при обращении к общей КЭШ-памяти: одну команду необходимо
извлечь из памяти (на первом этапе выполнения), а другая пытается записать результат в
память на заключительном этапе. Для борьбы с ресурсными конфликтами в основном
применяют три способа:
- приостановка конвейера (pipeline stall, pipeline "bubble" - конвейерный "пузырь")
до разрешения конфликта (до завершения первой конфликтующей команды);
- дублирование
аппаратных средств,
КЭШ-памяти на КЭШ команд и КЭШ данных;
- ускорение
или конвейеризация
затраты времени на приостановку. Решение об увеличении аппаратных затрат в по-
следних двух случаях принимают, если конфликт возникает часто, так как дополни-
тельные затраты могут быть существеннее, чем потери производительности от при-
остановки конвейера, если она происходит редко.
2. Конфликты программные или информационные. Делятся на две под-
группы:
а) конфликты по данным, возникающие в случае, если выполнение
следующей команды зависит от результата предыдущей.
б) конфликты по управлению, возникающие при нарушении естественногопорядка следования команд (условная передача управления).
3. Выделяют несколько вариантов конфликтов по данным:
1) Конфликт типа «чтение после записи» (Read After Write - RAW). Допустим,
имеются две команды - команда Ai и команда Aj, причем команда Ai предшествует
команде Aj. Конфликт RAW возникает, если команда Aj использует результаты
работы команды Ai, то есть должна прочитать регистр, либо память после записи
туда результата командой Ai, но к моменту чтения данные еще не записаны, по-
скольку команды следуют друг за другом на конвейере и сдвинуты всего на один
этап.
61
На рисунке 4.10. обведены этапы, на которых будет записан результат в первой
команде и потребуется считать результат для второй команды. Очевидно, что нужный
результат еще не будет находиться по месту, адресуемому второй командой, и про-
изойдет конфликт. 2) Конфликт типа «запись после чтения» (WAR). Происходит, если команда
Aj записывает результат до того, как он считывается командой Ai
(предшествующей Aj). Такой тип конфликта может возникать только в случае,
если команда Aj обгоняет команду Ai на конвейере в конвейерах с
неупорядоченной обработкой, выдачей или завершением команд (out-of-order
execution, out-of-order completition).
3) Конфликт типа «запись после записи» (WAR). Возникает, если
последующая команда Aj записывает результат до того, как запишет его
команда Ai, что может привести к нарушению логики программы, если,
например, между этими командами стоит еще какая-нибудь команда,
проверяющая этот адрес (регистр) (пример). Такой конфликт также может
происходить в случае неупорядоченного выполнения команд.
Методы борьбы с конфликтами по данным:
а) остановка конвейера;
б) реализация механизмов обхода и продвижения данных (data bypassing & forwarding);
в) планирование загрузки конвейера компилятором (статическая оптимиза-
ция);
62
г) неупорядоченное выполнение команд в процессоре (динамическая оптимиза-
ция);
Статическое планирование позволяет еще на этапе компиляции переупорядочивать
команды таким образом, чтобы они по возможности не конфликтовали друг с другом. На-
пример, рассмотрим 2 оператора языка:
A:=B + C; D:=E + F.
Неоптимизированный код, реализующий эти операции, представлен в первой
колонке таблицы 3.1. В данном потоке команд возникают конфликты типа RAW после
второй и седьмой команд, а также после 4-ой и восьмой. Конфликты при записи в память
могут быть устранены с помощью механизма обходов, а конфликты при чтении памяти - с
помощью переупорядочения потока команд, как показано во второй колонке таблицы 4.3.
При динамической оптимизации команды, вызвавшие конфликт, могут задерживаться
на конвейере, а следующие за ними команды, не вызывающие конфликтов и не зависящие
от конфликтных команд, пускаются в обход них. Анализ конфликтных ситуаций и выбор
команд для переупорядочивания возлагается на логику управления конвейером в самом
процессоре.
Таблица 4.3.
Исходная последовательность команд Переупорядоченная последователь-
ность
LW Rb,B LW Rc, C +---
--- ADDRa, Rb, Rc ----- SW
A,Ra *— LW Re,E
<«------1 LW Rf,F
ADDRd,Re,Rf *~ SW D,Rd
LW Rb,B LW Rc, C LW Re,E ADD Ra,
Rb, Rc LW Rf,F SW A,Ra ADD Rd, Re, Rf
SW D,Rd
При переименовании регистров логические имена регистров, присутствующие в ко-
мандах, динамически отображаются на физические регистры процессора, которых, как
правило, больше (если речь идет о RISC-подобной архитектуре). В результате различные
данные, относящиеся к одному и тому же логическому регистру, помещаются в разные
физические регистры. Соответствие между регистрами задается таблицей отображения,
которая динамически обновляется после декодирования каждой команды. Это облегчает
процессору планирование загрузки конвейера.