Называется тип архитектуры процессора с длинной машинной инструкцией
Обновлено: 21.11.2024
Давайте рассмотрим пример ISA. Мы начнем с рассмотрения программы, написанной на языке ассемблера, языке мнемонических инструкций. Обычно между инструкциями на языке ассемблера и машинными инструкциями существует соответствие один к одному. Эта программа будет собрана в шесть 32-битных инструкций в MIPS ISA. Что делает программа?
Типы наборов инструкций
- Стопка
- Накопитель
- Реестр общего назначения
- Загрузить/сохранить (или зарегистрировать-зарегистрировать). Только инструкции загрузки и сохранения имеют доступ к основной памяти. Остальные инструкции действуют только на регистры.
- Регистровая память. Любая инструкция может получить доступ к основной памяти.
Так называемые архитектуры вычислений с сокращенным набором инструкций (RISC) представляют собой архитектуры загрузки/сохранения. Примеры: SPARC, MIPS, Alpha AXP, PowerPC. Архитектуры сложных вычислений инструкций (CISC) обычно представляют собой архитектуры с регистровой памятью. Примеры: VAX, x86, MC68000.
Адресация памяти
Адресация памяти — одна из важнейших функций ISA. Адресация памяти определяется ISA.
Типы операндов
Типы инструкций
- Инструкции по передаче данных. Загружать данные из памяти в регистры или сохранять данные из регистров в память. Передача данных между различными типами специальных регистров.
- Арифметические и логические инструкции. Выполнять арифметические действия (например, сложение, вычитание, умножение) и логические операции (например, И, ИЛИ, исключающее ИЛИ), а также их комбинацию (меньше, больше, сравнение).
- Инструкции по передаче управления. Инструкции, влияющие на значение регистра счетчика программ. Безусловный переход, вызов процедуры, возврат, условный переход, непрямой переход, программное прерывание (например, ловушка). Кроме того, инструкции, которые делают что-то на основе некоторого условия, например. предустановленные инструкции.
- Инструкции с плавающей запятой. Традиционно инструкции, которые имеют дело со значениями с плавающей запятой, обрабатываются отдельно. Сложение, умножение, функции научного калькулятора (например, тангенс, квадратный корень), преобразование между целым числом, одинарной и двойной точностью.
Кодировка инструкций
Как типы инструкций, операнды, режимы адресации и т. д. передаются оборудованию? ISA определяет двоичное кодирование инструкций. Ассемблер кодирует программы, используя эту кодировку, а микроархитектура считывает и выполняет закодированную программу. Набор инструкций MIPS является хорошим примером.
Пример: набор инструкций MIPS
Каждая инструкция в наборе инструкций MIPS имеет длину 32 бита. Пронумеруем биты от 0 до 31, где 31 — старший бит. Имеется 32 целочисленных регистра. Большинство из них общего назначения. Регистр R0 всегда равен 0. Первые шесть битов, биты 31-26, определяют код операции, дающий информацию о том, что должна делать эта инструкция. Регистры и адреса MIPS являются 64-битными. MIPS имеет побайтовую адресацию, требует выровненного доступа и может быть переключен на Big Endian или Little Endian.
- Инструкции I-типа. Инструкции с непосредственными операндами. rt := rs op немедленно.
- Инструкции R-типа. Регистрация-регистрация арифметических и логических инструкций.
- Инструкции J-типа. Перейти к адресу ПК. Условные прыжки, прыжок и ссылка, ловушка.
Компилятор — это программа, которая переводит программы с языка высокого уровня в машинные инструкции, которые могут быть непосредственно выполнены ЦП. Компилятор оказывает большое и в наши дни все возрастающее влияние на производительность компьютерных систем.
Структура оптимизирующего компилятора
- Передняя часть. Внешний интерфейс читает исходный код, написанный программистом. Он выполняет лексический анализ и разбор, чтобы привести код в промежуточную форму, с которой можно легко работать в остальной части компилятора. Результатом интерфейса является промежуточное представление программного кода, например. абстрактное синтаксическое дерево или трехадресный код.
- Оптимизация высокого уровня. На этом этапе выполняются высокоуровневые преобразования, улучшающие код в промежуточном представлении. Преобразования на этом этапе в основном машинно-независимые, т. е. они не требуют или почти не требуют знаний об ISA. Некоторые примеры:
- Постоянное распространение, постоянное свертывание
- Устранение избыточности
- Циклические преобразования
- Интеграция процедур (автоматическое встраивание)
- Удаление мертвого и недостижимого кода
- Низкоуровневая оптимизация. На этом этапе код трансформируется в промежуточное представление более низкого уровня, которое имеет больше информации об ISA. Примеры возможных оптимизаций:
- Уменьшение силы
- Идиомы машин
- Зарегистрировать размещение
- Преобразования циклов с учетом кеша
- Генерация кода. На этом этапе из промежуточного представления генерируется код на языке ассемблера. На этом этапе могут быть выполнены некоторые оптимизации:
- Размещение кода
- Низкоуровневая оптимизация с обратной связью, например подсказки по веткам
- Выбор инструкции (например, mov 0 или xor)
- Оптимизация глазка
- Сборка. Ассемблер преобразует программу на языке ассемблера в машинные инструкции, готовые к загрузке. В это время могут быть выполнены определенные оптимизации выравнивания.
Влияние компилятора на архитектуру
Компьютерный архитектор должен знать технологию компиляции. Компиляторы решают, каким будет набор выполняемых инструкций. В наши дни специалисты по архитектуре и компиляторы должны сотрудничать для повышения производительности.
Умножение двух чисел в памяти
Справа представлена диаграмма, представляющая схему хранения для обычного компьютера. Основная память разделена на ячейки, пронумерованные от (строка) 1: (столбец) 1 до (строка) 6: (столбец) 4. Исполнительный блок отвечает за выполнение всех вычислений. Однако исполнительный блок может работать только с данными, загруженными в один из шести регистров (A, B, C, D, E или F). Предположим, мы хотим найти произведение двух чисел, одно из которых хранится в ячейке 2:3, а другое — в ячейке 5:2, а затем сохранить произведение обратно в ячейку 2:3.
Подход CISC
Основной целью архитектуры CISC является выполнение задачи за минимально возможное количество сборочных линий. Это достигается созданием аппаратного обеспечения процессора, способного понимать и выполнять ряд операций. Для этой конкретной задачи процессор CISC должен быть подготовлен со специальной инструкцией (мы назовем ее «MULT»). При выполнении эта инструкция загружает два значения в отдельные регистры, перемножает операнды в исполнительном блоке, а затем сохраняет произведение в соответствующем регистре. Таким образом, всю задачу умножения двух чисел можно выполнить одной инструкцией:
MULT — это так называемая «сложная инструкция». Он работает непосредственно с банками памяти компьютера и не требует от программиста явного вызова каких-либо функций загрузки или сохранения. Это очень похоже на команду на языке более высокого уровня. Например, если мы допустим, что "a" представляет значение 2:3, а "b" представляет значение 5:2, то эта команда идентична оператору C "a = a * b."
Одно из основных преимуществ этой системы заключается в том, что компилятору требуется очень мало усилий для преобразования оператора языка высокого уровня в язык ассемблера. Поскольку длина кода относительно мала, для хранения инструкций требуется очень мало оперативной памяти. Акцент делается на встраивании сложных инструкций непосредственно в аппаратное обеспечение.
Подход RISC
Процессоры RISC используют только простые инструкции, которые могут быть выполнены за один такт. Таким образом, описанную выше команду «MULT» можно разделить на три отдельные команды: «LOAD», которая перемещает данные из банка памяти в регистр, «PROD», которая находит произведение двух операндов, расположенных в регистрах, и « STORE», который перемещает данные из регистра в банки памяти. Чтобы выполнить точную серию шагов, описанных в подходе CISC, программисту потребуется закодировать четыре строки ассемблера:
На первый взгляд может показаться, что это гораздо менее эффективный способ завершения операции. Поскольку строк кода больше, требуется больше оперативной памяти для хранения инструкций уровня сборки. Компилятор также должен выполнить дополнительную работу, чтобы преобразовать оператор языка высокого уровня в код этой формы.
CISC | RISC |
Упор на оборудование | Упор на программное обеспечение |
Включает многотактовые сложные инструкции | Однотактовые, уменьшенные только инструкция |
Память в память: "LOAD" и "STORE" включены в инструкции | Регистрация для регистрации : «ЗАГРУЗИТЬ» и «СОХРАНИТЬ» являются независимыми инструкциями |
Небольшой размер кода, большое количество циклов в секунду | < TD>Низкое количество циклов в секунду,|
Транзисторы, используемые для хранения сложных инструкций | Затрачивает больше транзисторов в регистрах памяти |
Разделение инструкций "LOAD" и "STORE" фактически уменьшает объем работы, которую должен выполнять компьютер. После выполнения команды «MULT» в стиле CISC процессор автоматически стирает регистры. Если один из операндов необходимо использовать для другого вычисления, процессор должен повторно загрузить данные из банка памяти в регистр. В RISC операнд остается в регистре до тех пор, пока на его место не будет загружено другое значение.
Уравнение производительности
Следующее уравнение обычно используется для выражения производительности компьютера:
Подход CISC пытается свести к минимуму количество инструкций на программу, жертвуя количеством циклов на инструкцию. RISC делает наоборот, сокращая количество циклов на инструкцию за счет количества инструкций на программу.
Препятствия RISC
Несмотря на преимущества обработки на основе RISC, чипам RISC потребовалось более десяти лет, чтобы закрепиться в коммерческом мире. Во многом это было связано с отсутствием поддержки программного обеспечения.
Хотя в линейке Power Macintosh от Apple использовались микросхемы на основе RISC, а Windows NT была совместима с RISC, Windows 3.1 и Windows 95 разрабатывались с учетом процессоров CISC. Многие компании не хотели рисковать с появляющейся технологией RISC. Без коммерческого интереса разработчики процессоров не могли производить микросхемы RISC в достаточно больших объемах, чтобы сделать их цену конкурентоспособной.
Еще одной серьезной неудачей стало присутствие Intel. Хотя их CISC-чипы становились все более громоздкими и трудными в разработке, у Intel были ресурсы, необходимые для разработки и производства мощных процессоров. Хотя чипы RISC могли превзойти усилия Intel в определенных областях, различия были недостаточно велики, чтобы убедить покупателей изменить технологии.
Ограничения процессора Superscalar очевидны, поскольку сложность планирования инструкций становится сложной. Внутренний параллелизм в потоке инструкций, сложность, стоимость и проблемы с инструкциями ветвления решаются с помощью архитектуры набора команд более высокого уровня, называемой очень длинным словом инструкций (VLIW) или машинами VLIW.
VLIW использует параллелизм на уровне инструкций, т. е. имеет программы для управления параллельным выполнением инструкций. В других архитектурах производительность процессора повышается с помощью одного из следующих методов: конвейерная обработка (разбивание инструкции на части), суперскалярный процессор (независимое выполнение инструкций в разных частях процессора), выполнение вне очереди. (выполнять заказы иначе, чем программа), но каждый из этих методов очень сильно усложняет аппаратное обеспечение. Архитектура VLIW справляется с этим в зависимости от компилятора. Программы решают параллельный поток инструкций и разрешают конфликты. Это увеличивает сложность компилятора, но значительно снижает аппаратную сложность.
- Процессоры в этой архитектуре имеют несколько функциональных блоков, получаемых из кэша инструкций, которые имеют очень длинное слово инструкции.
- Несколько независимых операций объединены в одну инструкцию VLIW. Они инициализируются в одном и том же такте.
- Каждой операции назначается независимый функциональный блок.
- Все функциональные блоки имеют общий регистровый файл.
- Слова инструкций обычно имеют длину от 64 до 1024 бит в зависимости от количества исполнительных блоков и длины кода, необходимой для управления каждым блоком.
- Планирование инструкций и параллельная отправка слова выполняются компилятором статически.
- Компилятор проверяет наличие зависимостей перед планированием параллельного выполнения инструкций.
Блок-схема архитектуры VLIW
Временно-пространственная диаграмма процессора VLIW, где 4 инструкции выполняются параллельно в одном командном слове
Умножение двух чисел в памяти
Справа представлена диаграмма, представляющая схему хранения для обычного компьютера. Основная память разделена на ячейки, пронумерованные от (строка) 1: (столбец) 1 до (строка) 6: (столбец) 4. Исполнительный блок отвечает за выполнение всех вычислений. Однако исполнительный блок может работать только с данными, загруженными в один из шести регистров (A, B, C, D, E или F). Предположим, мы хотим найти произведение двух чисел, одно из которых хранится в ячейке 2:3, а другое — в ячейке 5:2, а затем сохранить произведение обратно в ячейку 2:3.
Подход CISC
Основной целью архитектуры CISC является выполнение задачи за минимально возможное количество сборочных линий.Это достигается созданием аппаратного обеспечения процессора, способного понимать и выполнять ряд операций. Для этой конкретной задачи процессор CISC должен быть подготовлен со специальной инструкцией (мы назовем ее «MULT»). При выполнении эта инструкция загружает два значения в отдельные регистры, перемножает операнды в исполнительном блоке, а затем сохраняет произведение в соответствующем регистре. Таким образом, всю задачу умножения двух чисел можно выполнить одной инструкцией:
MULT — это так называемая «сложная инструкция». Он работает непосредственно с банками памяти компьютера и не требует от программиста явного вызова каких-либо функций загрузки или сохранения. Это очень похоже на команду на языке более высокого уровня. Например, если мы допустим, что "a" представляет значение 2:3, а "b" представляет значение 5:2, то эта команда идентична оператору C "a = a * b."
Одно из основных преимуществ этой системы заключается в том, что компилятору требуется очень мало усилий для преобразования оператора языка высокого уровня в язык ассемблера. Поскольку длина кода относительно мала, для хранения инструкций требуется очень мало оперативной памяти. Акцент делается на встраивании сложных инструкций непосредственно в аппаратное обеспечение.
Подход RISC
Процессоры RISC используют только простые инструкции, которые могут быть выполнены за один такт. Таким образом, описанную выше команду «MULT» можно разделить на три отдельные команды: «LOAD», которая перемещает данные из банка памяти в регистр, «PROD», которая находит произведение двух операндов, расположенных в регистрах, и « STORE», который перемещает данные из регистра в банки памяти. Чтобы выполнить точную серию шагов, описанных в подходе CISC, программисту потребуется закодировать четыре строки ассемблера:
На первый взгляд может показаться, что это гораздо менее эффективный способ завершения операции. Поскольку строк кода больше, требуется больше оперативной памяти для хранения инструкций уровня сборки. Компилятор также должен выполнить дополнительную работу, чтобы преобразовать оператор языка высокого уровня в код этой формы.
CISC | RISC |
Упор на оборудование | Упор на программное обеспечение |
Включает многотактовые сложные инструкции | Однотактовые, уменьшенные только инструкция |
Память в память: "LOAD" и "STORE" включены в инструкции | Регистрация для регистрации : «ЗАГРУЗИТЬ» и «СОХРАНИТЬ» являются независимыми инструкциями |
Небольшой размер кода, большое количество циклов в секунду | < TD>Низкое количество циклов в секунду,|
Транзисторы, используемые для хранения сложных инструкций | Затрачивает больше транзисторов в регистрах памяти |
Разделение инструкций "LOAD" и "STORE" фактически уменьшает объем работы, которую должен выполнять компьютер. После выполнения команды «MULT» в стиле CISC процессор автоматически стирает регистры. Если один из операндов необходимо использовать для другого вычисления, процессор должен повторно загрузить данные из банка памяти в регистр. В RISC операнд остается в регистре до тех пор, пока на его место не будет загружено другое значение.
Уравнение производительности
Следующее уравнение обычно используется для выражения производительности компьютера:
Подход CISC пытается свести к минимуму количество инструкций на программу, жертвуя количеством циклов на инструкцию. RISC делает наоборот, сокращая количество циклов на инструкцию за счет количества инструкций на программу.
Препятствия RISC
Несмотря на преимущества обработки на основе RISC, чипам RISC потребовалось более десяти лет, чтобы закрепиться в коммерческом мире. Во многом это было связано с отсутствием поддержки программного обеспечения.
Хотя в линейке Power Macintosh от Apple использовались микросхемы на основе RISC, а Windows NT была совместима с RISC, Windows 3.1 и Windows 95 разрабатывались с учетом процессоров CISC. Многие компании не хотели рисковать с появляющейся технологией RISC. Без коммерческого интереса разработчики процессоров не могли производить микросхемы RISC в достаточно больших объемах, чтобы сделать их цену конкурентоспособной.
Еще одной серьезной неудачей стало присутствие Intel.Хотя их CISC-чипы становились все более громоздкими и сложными в разработке, у Intel были ресурсы, необходимые для разработки и производства мощных процессоров. Хотя чипы RISC могли превзойти усилия Intel в определенных областях, различия были недостаточно велики, чтобы убедить покупателей изменить технологии.
Читайте также: