Э. Таненбаум - Архитектура компьютера (1127755), страница 117
Текст из файла (страница 117)
Это значит, что выполнение каждой команды можно сделать условным. Дополнительное 6-разрядное поле предикатного регистра, о котором мы упомянули, позволяет выбрать один из 64 1-разрядных предикатных регистров. Следовательно, оператор 11 может быть скомпилирован в код, который устанавливает один из предикатных регистров в 1, если условие истинно, и в О, если условие ложно. Одновременно и автоматически инвертируется другой предикатный регистр. Таким образом, при поддержке предикации машинные команды, которые формируются из операторов Феп и е1 зе, сливаются в единый поток команд, причем у команд первого из них поле предикатного регистра оказывается единичным, у второго — нулевым.
В листингах 5.15 — 5.17 показано, как использовать предикацию для устранения переходов. Команда СИРЕО сравнивает два регистра и устанавливает предикатный регистр Р4 в 1, если они равны, и в О, если они не равны. Кроме того, команда инвертирует еще один регистр, например, Р5. После этого команды частей 468 Глава 5. Уровень архитектуры набора команд 11 и ВМел можно поместить одну за другой, причем каждая из них оказывается связанной с каким-нибудь предикатным регистром (регистр указывается в угловых скобках). Сюда можно поместить любой код, при условии, что каждая команда предсказывается правильно.
Листинг 5.15. Оператор Н 1ПЙ1 — йг1 ЙЗ = Й4 + Й5. Е1зе йб = Й4 — й5 Листинг 5.15. Код на ассемблере для листинга 5.15 СМР Й1,й2 ВМЕ Е1 МОН йз.й4 АОО йз.й5 Вй Е2 Е1: МОН йб.й4 ВОВ йб,й5 Листинг 5.17. Предикатное выполнение СМРЕО й1,й2,Р4 <Р4> АОО йЗ,Й4,Й5 <Рб> 50В йб,й4,Й5 В архитектуре 1А-64 эта идея доведена до логического завершения — здесь с предикатными регистрами связаны и команды сравнения, и арифметические команды, и некоторые другие команды. Предикатные команды могут помещаться в конвейер последовательно без каких-либо проблем и простоев.
Поэтому они очень полезны. В архитектуре 1А-64 предикация происходит следующим образом. Каждая команда действительно выполняется, и в самом конце конвейера, когда уже нужно сохранять результат в выходном регистре, производится проверка, истинно ли предсказание. Если да, то результаты просто записываются в выходной регистр. Если предсказание ложно, то записи в выходной регистр не происходит. Подробно о предикации вы можете прочитать в дополнительной литературе [60~.
Спекулятивная загрузка Еще одна особенность 1А-64, повышающая быстродействие, — поддержка спекулятивной загрузки. Если команда ЕОАО спекулятивна и не срабатывает, то вместо того, чтобы вызвать исключение, она просто прекращает выполняться и сообщает, что регистр, в который она должна была загрузить значение, недействителен. Для этого используется тот самый бит отравления, о котором мы упоминали в главе 4. А исключение будет вызвано только в том случае, если затем попытаться использовать этот регистр. Обычно при спекулятивной загрузке компилятор помещает команды ЕОАО перед другими командами. Поскольку выполнение этих команд начинается раньше, чем нужно, они могут завершиться еще до того, как потребуются результаты.
В том месте, где ему нужно получить значение определенного регистра, компилятор вставляет команду СНЕСК. Если значение там уже есть, команда СНЕСК рабо- Краткое содержание главы 469 тает так же, как МОР, и выполнение программы просто сразу продолжается дальше. Если значения в регистре еще нет, следующая команда вынуждена простаивать.
Суммируя, можно сказать, что в машинах с архитектурой 1А-64 реализовано несколько механизмов повышения быстродействия. Во-первых, это современная конвейеризированная трехадресная В18С-машина, поддерживающая механизм загрузки/сохранения. Во-вторых, компилятор определяет, какие команды могут выполняться одновременно, и, не вступая в конфликт, группирует эти команды в пучки. Таким образом, процессор может просто планировать обработку пучков, не думая ни о каких проверках.
В-третьих, предикация позволяет обьединить команды обоих переходов в операторе 11, устраняя при этом как условный переход, так и необходимость прогнозирования этого перехода. Наконец, спекулятивная загрузка позволяет вызывать операнды заранее, и даже если позднее окажется, что эти операнды не нужны, ничего страшного не произойдет. Дополнительные сведения о процессоре 11ашцш 2 и его микроархитектуре можно почерпнуть в дополнительной литературе 1144, 178].
Краткое содержание главы Для большинства людей уровень архитектуры набора команд — это «машинный язык». На этом уровне машина имеет память с байтовой или пословной организацией, состоящую из нескольких десятков мегабайтов и содержащую команды наподобие МОЧЕ, ЯОО и ВЕО. В большинстве современных компьютеров память организована в виде последовательности байтов, при этом 4 или 8 байт группируются в слова. Обычно в машине есть от 8 до 32 регистров, каждый из которых содержит одно слово. В некоторых машинах (например, в Репггцш 4) при обращении к словам памяти выравнивание по естественным границам ячеек не требуется, в других (например, в (Лгга8РАВС П1) это — обязательное условие.
Команды обычно имеют 1, 2 или 3 операнда, обращение к которым происходит с помощью различных режимов адресации: непосредственной, прямой, регистровой, индексной и т. д. Команды обычно могут перемешать данные, выполнять унарные и бинарные операции (в том числе арифметические и логические), совершать переходы, вызывать процедуры, выполнять циклы, а иногда и некоторые операции ввода-вывода. Типичные команды перемещают слово из памяти в регистр или наоборот, складывают, вычитают, умножают или делят два регистра или регистр и слово из памяти, или сравнивают два значения в регистрах или памяти. Довольно часто количество команд в компьютерах превышает 200. В С18С-процессорах их и того больше. Для передачи управления на уровне архитектуры команд используются различные примитивы: перехода, вызовов процедур и сопрограмм, перехвата исключений и обработки прерываний.
Переходы нужны для того, чтобы остановить одну последовательность команд и начать новую. Процедуры позволяют выделить какой-то фрагмент программы, который можно затем вызывать из различных мест этой же программы. Сопрограммы позволяют двум потокам управления работать параллельно. Перехват исключений используется для сигнализации об исключительных ситуациях (например, о переполнении). Механизм прерываний 470 Глава 5.
Уровень архитектуры набора команд дает возможность выполнять ввод-вывод параллельно с основными вычислениями, при этом, как только ввод-вывод завершается, центральный процессор получает сигнал об этом. Задачу «Ханойская башня» можно решить с использованием рекурсии. Наконец, в архитектуре 1А-64 используется вычислительная модель ЕР1С, упрощающая реализацию параллелизма в программах. Для повышения быстродействия в этой архитектуре предусмотрены группировка команд, предикация и спекулятивная загрузка. Архитектура 1А-64 способна стать удачной заменой Репг1шп 4, даже несмотря на то, что она возлагает на компилятор большую нагрузку в плане поддержания параллелизма.
Вопросы и задания 1. Слову в системе с прямым порядком следования байтов присвоено численное значение 3. Предположим, что это слово байт за байтом передается в систему с обратным порядком следования байтов и сохраняется в ней, причем исходный байт 0 соответствует целевому байту 0 и т.
д. Каким станет численное значение слова в системе с обратным порядком следования байтов? 2. В Репт1пш 4 команды могут содержать любое число байтов, даже нечетное. В П1гга5РАВС П! все команды содержат четное число байтов. В чем преимущество Репбпш 4? 3. Разработайте расширенный код операций, который позволяет закодировать в 36-разрядной команде следующее: + 7 команд с двумя 32-разрядными адресами и номером одного 3-разрядного регистра; + 500 команд с одним 15-разрядным адресом и номером одного 3-разрядного регистра; + 50 команд без адресов и регистров.
4. Пусть в машине поддерживаются 16-разрядные команды и 6-разрядные адреса. Одни команды содержат один адрес, другие — два. Если существует п двухадресных команд, то каково максимальное число одноадресных команд? 5, Можно ли разработать такой расширенный код операций, который позволял бы кодировать в 12-разрядной команде следующее (размер регистра составляет 3 бита): + 4 команды с тремя регистрами; + 255 команд с одним регистром; + 16 команд без регистров. 6.
Пусть имеется одноадресная машина с регистром-сумматором. Вот значения некоторых слов памяти: + слово 20 содержит число 40; + слово 30 содержит число 50; Вопросы и задания 471 + слово 40 содержит число 60; + слово 50 содержит число 70; Какие значения загрузят в регистр-сумматор перечисленные ниже команды? СОЯО 1ММЕ01ЯТЕ 20 ЕОЯО 01ИЕСТ 20 СОЯО 1ИОИЕСТ 20 СОЯО 1ММЕ01ЯТЕ ЗО СОЯО 01ИЕСТ ЗО ЕОЯО 1ИО!ИЕСТ ЗО 7. Для каждого из четырех видов машин — безадресной, одноадресной, двухадрес- ной и трехадресной — напишите программу вычисления следующего выражения: Х = (А «- В х С) /(Р— Е х Е). В наличии имеются следующие команды: + безадресные: РО5Н М, РОР М, ЯОО, 5ОВ, МОЕ, 01Ч; + одноадресные: ЕОАО М, 5ТОВЕ М, АОО М, 5ОВ М, Мй. М, 01Ч М; + двухадресные: МОЧ (Х = У), АОО (Х = Х«- У), 5ОВ (Х= Х вЂ” У), Мй. (Х= Хх У), 01Ч (Х = Х/У); + трехадресные: МОЧ (Х= У), А00 (Х = У«- У), 5ОВ (Х = У вЂ” 2), Мй (Х = У х 2), 01Ч (Х = У/2).
Здесь М вЂ” это 16-разрядный адрес памяти, а Х, У и 2 — либо 16-разрядные адреса, либо 4-разрядные регистры. Безадресная машина использует стек, одноадресная машина — регистр-аккумулятор, а оставшиеся две имеют 16 регистров и команды, которые оперируют всеми комбинациями ячеек памяти и регистров. Команда 5ОВ Х,У вычитает У из Х, а команда 5ОВ Х,Ч,2 вычитает 2 из Уи помешает результат в Х. Если длина кодов операций равна 8 бнт, а размеры команд кратны величине 4 бит, сколько битов нужно каждой машине для вычисления Х? 8. Придумайте такой механизм адресации, который позволяет определять в 6-разрядном поле произвольный набор из 64 адресов, не обязательно смежных.
9. В чем недостаток самомодифицирующихся программ, о котором не было упомянуто в тексте этой главы? 10. Переделайте следующие формулы из инфиксной записи в обратную поль- скую запись: 1) А-'-В«- С«-Р«-Е; 2) (А «- В) х (С э Р) «- Е; 3) (АхВ) «-(СхР) «-Е; 4) (А — В) х (((С вЂ” Р х Е)/Е)/С) х Н 11. Какие из следующих пар формул в обратной польской записи математически эквивалентны? 1) А В «- С + и Л В С «- «-; 2) Л — С вЂ” иАВ С вЂ” —; 3) А В х С «- иА В С «- х.