Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OEVMiS_ekz_shpory

.pdf
Скачиваний:
10
Добавлен:
11.05.2015
Размер:
1.93 Mб
Скачать

34. Структурные конфликты и способы их минимизации.

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

1.Совершенствование структуры процессора путем введения буферных ЗУ.

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

2.Сокращение временных затрат при обращениях к памяти:

расширение кэш-памяти. Это приводит к повышению вероятности наличия требуемых команд и данных в кэш-памяти и уменьшению числа обращений к основной памяти;

многоуровневая организация кэш-памяти. Такая организация обеспечивает со-

четание большой емкости кэш-памяти с высоким быстродействием;

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

дим, например, когда при непрерывном поступлении команд происходит наложение циклов выборки команд (IF) и операнда (OF). Число каналов обычно равняется трем: два для выдачи операндов и один – для приема результата;

разделение кэш-памяти на два независимых блока: кэш команд и кэш данных

(гарвардская архитектура кэш-памяти);

расширение путей доступа к памяти за счет разбиения памяти на модули, об-

ращение к которым может осуществляться одновременно – расслоение памяти. Это приводит к уменьшению времени обращения к основной памяти;

увеличение числа внутренних регистров процессора . Чтобы избежать конфлик-

тов при обращении к РОН, их делают многопортовыми (аналогично кэш-памяти). 3. Быстрое преобразование адресов. На стадии формирования адресов операндов производится преобразование логических адресов в физические. Для подобных преобразований адресов используются специальные управляющие таблицы, которые располагаются в основной памяти. Для ускорения процесса преобразования адресов используются специальные аппаратные средства, позволяющие завершить действия, связанные с формированием адресов и выборкой операндов, за один машинный цикл. К числу таких средств относится, например, буфер ассоциативной трансляции , представляющий собой специализированную кэш-память и содержащий пары «логический адрес – физический адрес», а также средства выполнения операции параллельного сравнение по всем записям таблицы (полностью ассоциативный кэш).

4. Конвейеризация функциональных устройств.

-для разрешения всех возможных комбинаций команд в конвейере.

35.Конфликты по данным в командном конвейере и способы их минимизации.

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

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

1)чтение после записи (RAW) – команда j пытается прочитать операнд x прежде, чем команда i успела записать новое значение операнда x. Таким образом, команда j может некорректно получить старое значение операнда x.

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

3)запись после записи (WAW) – команда j пытается записать новое значение операнда x прежде, чем команда i успела записать свое значение операнда x, т.е. записи заканчиваются в неверном порядке, оставляя в качестве значения операнда x значение, записанное командой i, а не командой j.

В борьбе с конфликтами по данным выделяют два аспекта: своевременное обнаружение потенциального конфликта и его устранение. Признаком возникновения конфликта по данным между двумя командами i и j служит невыполнение хотя бы

одного из трех условий Бернстейна: для RAW –

 

; для WAR –

; для WAW –

,

где

– множество операн-

дов, изменяемых командой k;

– множество операндов, читаемых командой k.

Меры для устранения конфликтов по данным принимаются как на программном, так и на аппаратном уровнях. При этом применяются следующие методы.

1.Изменение порядка выполнения команд программы. между зависимыми ко-

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

ем загрузки конвейера или планированием потока команд.

Фактическое разрешение конфликтов возлагается на аппаратные методы.

2.Наиболее очевидным и простым решением является остановка команды j на несколько тактов с тем, чтобы команда i успела завершиться или, по крайней мере, миновать ступень конвейера, на которой возникает конфликт.

3.Иногда приостанавливают только команду j, не задерживая следующие за ней команды. Однако в отличие от первого подхода – планирования загрузки конвейера – изменение порядка выполнения команд осуществляется на этапе выполнения программы аппаратными средствами. Поэтому методы, реализующие данный прием, получили общее название методов динамической оптимизации.

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

36. Конфликты по управлению и способы их минимизации.

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

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

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

1.Ряд мер основывается на методе исследования структуры программы. К ним относятся следующие меры: - исключение ветвлений в программе, если это возможно. Для этого применяют: вычисление ветвления на этапе компиляции, вынос ветвлений за пределы цикла, развертку итераций (разворачивание циклов); - метод отложен-

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

2.Сокращение задержек, обусловленных выборкой команды из точки перехода:

-вычисление исполнительного адреса перехода на ступени декодирования команды.

В соответствии с этим подходом на этапе декодирования команды выясняется не только ее принадлежность к командам перехода, но также способ адресации и адрес-

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

использование буфера цикла.

3.Статическое предсказание переходов осуществляется на основе некоторой априорной информации о подлежащей выполнению программе. Предсказание делается на этапе компиляции программы и в процессе вычислений уже не меняется. Известные стратегии статического предсказания для команд УП можно классифицировать следующим образом:

- переход происходит всегда (ПВ). В этом варианте предполагается, что каждая команда условного перехода в программе обязательно завершится переходом, т.е. условные переходы прогнозируются как выполняемые. С учетом такого предсказания, дальнейшая выборка команд производится, начиная с адреса перехода;

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

4.В динамических стратегиях решение о наиболее вероятном исходе команды УП принимается в ходе вычислений на основе информации о предшествующих переходах – истории переходов, собираемой в процессе выполнения программы.

37.Предсказание переходов

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

Известные стратегии статического предсказания для команд УП можно классифицировать следующим образом:

-переход происходит всегда (ПВ). В этом варианте предполагается, что каждая команда условного перехода в программе обязательно завершится переходом, т.е. условные переходы прогнозируются как выполняемые. С учетом такого предсказания, дальнейшая выборка команд производится, начиная с адреса перехода;

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

-предсказание определяется по результатам профилирования подлежащих выполнению программ. Под профилированием подразумевается выполнение про-

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

-предсказание определяется кодом операции команды перехода. При предсказании на основе кода операции команды перехода для одних команд предполагается, что переход произойдет, для других – что переход не случится. Например, для команды перехода по переполнению логично предположить, что перехода не будет. Эффективность предсказания зависит от характера программы.

-предсказание определяется направлением перехода. Если адрес выполня-

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

-при первом выполнении команды переход происходит всегда. В данной стратегии при первом выполнении любой команды условного перехода делается предсказание, что переход обязательно будет. Предсказания на последующее выполнение команды зависят от правильности начального предсказания. Стратегию можно считать статической только частично, поскольку она однозначно определяет исход команды лишь при первом ее выполнении. Далее стратегия становится динамической. Точность прогноза в соответствии с данной стратегией выше, чем у всех предшествующих. Однако при больших объемах программ вариант практически нереализуем из-за того, что нужно отслеживать слишком много команд условного перехода.

2.1 Программистская модель

Программистская модель – совокупность программно-доступных регистров.

1.Процессор содержит 32 программно-доступных регистра ($0-$31). $0- регистр-источник константы = 0. Записать в него нельзя. $31 – регистр связи. Используется при обращении к подпрограм-

мам(процедурам). В него помещается адрес возврата к подпрограмме.

2.Программный счетчик PC 32-разрядный.

3.2 регистра специального назначения HI (32 старших разряда), LO (32 млад-

ших). Используются при умножении и делении (HI – частное, LO – остаток).

 

 

 

РОН

$0

zero

– константа = 0

$1

$at

– для целей ассемблера для неаппаратных команд,

 

 

служат для удобства, мы ими не пользуемся

$2, $3

$v0, $v1

– используются для возврата результата из процедуры

$4-$7

$a0-$a3

– используются для передачи первых четырех параметров

 

 

в процедуру. Остальные аргументы передаются через T.

$8-$15

$t0-$t7

– регистры временного хранения (общие регистры).

 

 

Ими можем пользоваться свободно, вызываемая процедура

 

 

не должна сохранять значение. Особенности этих регистров –

 

 

их не нужно сохранять в процедуре.

$16-$23

$s0-$s7

– для общего использования, но нужно сохранять предыдущее

 

 

значение в вызываемой процедуре.

$24, $25

$t8, $t9

 

 

$26, $27

$k0, $k1

– зарезервированы для использования ядром операционной

 

 

системы.

$28

$gp

– глобальная область

$29

$sp

– указатель стека

$30

$fp ($s8)

- указатель фрейма (кадра). Для каждой процедуры может

 

 

выделяться своя область памяти в стеке. Указатель кода

 

 

запоминает S. В виртуальной машине не используется.

$31

$ra

– регистр связи. В нем находится адрес возврата

2.

2. Организация адресного пространства

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В MIPS архитектуре проводится разли-

 

 

 

 

 

чие между физической памятью (то есть

 

 

 

 

 

память, которая может быть действи-

 

 

 

 

 

тельно использована в аппаратном обес-

 

 

 

 

 

печении)

и

 

виртуальной

памя-

 

 

 

 

 

ти. Физическая память состоит из двух

 

 

 

 

 

модулей:

 

128kB

предназначена

 

 

 

 

 

только для чтения флэш-памяти (

read-

 

 

 

 

 

only Flash memory

) (которой достаточно

 

 

 

 

 

для 32768 инструкций) и 4 кбайт памяти

 

 

 

 

 

данных (data memory) (достаточно для

 

 

 

 

 

1024 записей данных). MIPS абстрагиру-

 

 

 

 

 

ется от физической памяти путем созда-

 

 

 

 

 

ния единого пространство памяти (назы-

 

 

 

 

 

ваемого виртуальной памятью), которая

отображается

на

реальную

физическую

 

память.

 

В нашей реализации, виртуальная память очень проста. Код программы начинается с виртуального адреса 0x00400000, что соответственно отображается на адрес 0x00000 флэш-памяти (flash memory). Последующие адреса отображаются линейно, так что виртуальный адрес 0x00400020 соответствует адресу 0x00020 флэш-памяти, и т.д. Очевидно, что если у нас есть только 128kB флэш-памяти, то виртуальные адреса 0x00420000 и выше не будут являться действительными, как и адреса ниже

0x00400000.

Данные начинается с виртуального адреса 0x10000000 и растут в сторону увеличения виртуальных адресов (эти данные называют динамическими данными, потому что машина не знает, сколько их будет отведено во время выполнения). В MIPS, есть также понятие стека - то есть, данные, которые начинается чуть ниже виртуального адреса 0x80000000 и растут в сторону уменьшения виртуальных адресов. Хотелось сделать поддержку стека, поэтому наше отображение будет выглядеть следующим образом:

Виртуальный адрес 0x10000000 отображается на адрес 0x000 встроенного ОЗУ, и последующие адреса отображаются линейно. Виртуальный адрес 0x7fffffff отображается на 0xfff ПЗУ (RAM) чипа и предыдущие адреса отображаются линейно. Например:

Обратите внимание, что один физический адрес состоит из двух соответствующих виртуальных адресов - так как в зависимости от того, как растѐт адрес, он может принадлежать либо динамическим данным или данным стека. Однако он не может относиться к тому и другому, и именно поэтому MIPS включает в себя $ BRK регистр. Этот регистр содержит верхнее значение сегмента данных и тем самым ограничивает область стека. Если область стека превысит этот лимит - будет сгенерировано исключение. Например, предположим, что $ BRK равно 0x10000120. Это означает, что данные между 0x10000000 и 0x1000011f принадлежит динамическим данным. Это означает, что ссылки на область памяти между 0x7ffff000 и 0x7ffff11f будут недействительными.

Память имеет байтовую организацию. Адреса после 80000000 используются для подключения внешних устройств.

2.3. Способы адресации

Аппаратные способы адресации

Аппаратно поддерживается только 1 способ адресации – это БАЗОВЫЙ ОТНООСИТЕЛЬНЫЙ РЕГИСТРОВЫЙ.

Disp(Rx)

Disp – смещение

Rx – базовый регистр, 16-разрядное значение со знаком Disp+Rx – эффективный адрес

На уровне процессора только 1 уровень - базовая/индексная адресация:

Ea= (rx) + disp

Пример: 0($a0) 4($a0)

Программные способы адресации

-Регистровый

-Непосредственный (в команде)

-Способы адресации для обращения к памяти

1)(Rx) косвенно-регистровая адресация. Адрес операнда - это содержимое реги-

стра. Как относительная регистровая, только смещение = 0.

2)Imm - значение адреса. Прямая адресация. Адрес – непосредственное число. 10

3)Imm(Rx) – к содержимому регистра прибавляется смещение (регистрово-

относительная). 10($R)

4)Symbol – задается с помощью символического имени (прямая адресация). sum

5)Symbol +- imm (прямая адресация). sum+- 10

6)Symbol +- imm(Rx) – регистровая относительная адресация. sum+- 10(rx)

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

Все команды микропроцессора делятся на: Rdest – регистр приемник

Rsrc – регистр источник Imm – псевдоинструкции Var – символическое имя

1. Команда ПЕРЕСЫЛКИ (из Рег в Рег) ДАННЫХ ПСЕВДОИНСТР.

Move Rdest,Rsrc

2. Команды ЗАГРУЗКИ.

 

 

 

 

2.1

Байта

lb

Rdest,adress

 

– c расширением знака

 

 

lbu

Rdest,adress

 

– без расширения знака

2.2

Полуслова lh

-//-

- с расширением знака

 

 

lhu

-//-

- без расширения знака

2.3. Слова

 

lw

-//-

 

 

 

2.4

Imm

li

Rdest,imm

 

-

 

2.5

Адреса

 

la

Rdest,var

 

 

 

array:

 

 

 

 

 

 

 

 

.word 11, 12, 13, 14… - определить адрес первого слова

 

 

Lw

$t0, array

 

- загрузить в регистр 1-ое слово массива

 

 

Lw

$t1, array+8

 

- загрузить в регистр 3-ее слово массива

 

 

La

$t0, array

 

- загрузить адрес в регистр

 

 

Lw

$t1, ($t0)

 

 

 

 

 

Lw

$t1, 0($t0)

 

 

 

 

 

Lw

$t1, 8($t0)

 

 

 

 

3. Команды СОХРАНЕНИЯ

 

 

3.1 Байта

 

sb

Rdest,adress

 

 

3.2 Полуслова

 

sw

-//-

 

 

 

3.3 Слова

 

sh

-//-

 

 

 

 

4. АРИФМЕТИЧЕСКИЕ команды

 

4.1

Сложение

add

Rdest,Rsrc1,

Rsrc2 - фиксирует переполнение

 

 

addu -//-

 

 

- не фиксирует переполнение

4.2

Вычитание sub

-//-

 

 

 

 

 

 

subu

-//-

 

 

 

 

 

5. ЛОГИЧЕСКИЕ команды

 

 

5.1

Поразрядное И

and

-//-

 

 

 

5.2

Инверсия

 

not

Rdest,Rsrc

 

 

 

6. Команды УСЛОВНОГО ПЕРЕХОДА

 

Не=

bne

Rsrc1,

Rsrc2,

toiget

1) Арифметические (arithmetic)

a. Abs b. Add c. Div d. Mult e. Neg ….

2) Команды переходов (branch/jump) a. B b. Beq c. Beqz d. Ble e. Bne ….

3)Команды сравнения (compare) a. Seq b. Sge c. Sgt d. sle

4)Команды для работы с числами с плавающей запятой (Floating point) a. Abs.d b. Abs.s c. Add.s d. Bc1f

5)Команды загрузки/сохранения (load/store/calls)

a. La b. Lb c. Ld d. Sb e. Sw …

2.5 Кодирование исходной программы на языке ассемблера MIPS

Программа на ассемблере состоит из:

-машинной команды

-директивы

Executable instruction – исполнимая инструкция(то, что поддерживается аппаратно процессором)

Псевдо-инструкция – не поддерживается аппаратно, процессор сам заменяет её на процессорные машинные команды.

Формат оператора. Выделяется 4 поля:

Метки :

мнемоники

операнды #комментарий

[lable1:]

mnemonic

[operands]

[#comment]

Метка может быть в обоих сегментах. Формируется по всем правилам С.

Метка обязательно заканчивается знаком - «:».

Обычно сначала задается сегмент данных. В сегменте данных мы располагаем различные сообщения которые надо выводить на экран, переменные с инициализацией или без. Дальше идет кодовый сегмент, который должен начинаться с метки main. Завершается команда системным вызовом

2.6 Директивы ассемблера:

Директивы предназначенные для объявления сегментов

.text <address> - адрес по которому начинается сегмент

.data <address> - Начало сегмента данных. Если присутствует аргумент <address>, то указывается на адрес начала сегмента данных.

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

.ascii ―string‖ в соответствующий байт помещается код ASCII символа

.asciiz ―string‖ в конце строки добавляется код null. Можно использовать эти команды для вывода длинных строк на экран.

.space n – выделяет n байт инициализированных пробелами.

Директивы определения значений

.word w1,w2 – слова 32-разрядные.

.half h1,h2 – половинные слова 16-р

.align n – по этой директиве выравнивание на границу = 2n. Если n=0 выравнивание отключает.

.globl symbol – определяет глобальное символическое имя

.double d1,d2 – числа с плавающей запятой типа double

.float f1,f2 – числа с плавающей запятой типа float

.byte b1,..,bn – сохраняет n значений в последовательной байт памяти

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