Сжатый набор команд
Сжатый набор команд или просто сжатые инструкции — это разновидность ( микропроцессора архитектуры набора команд ISA), которая позволяет представлять инструкции в более компактном формате. В большинстве реальных примеров длина сжатых инструкций составляет 16 бит в процессоре, который в противном случае использовал бы 32-битные инструкции. 16-битная ISA является подмножеством полной 32-битной ISA, а не отдельным набором команд. Меньший формат требует некоторых компромиссов: обычно доступно меньше инструкций и меньше регистров процессора можно использовать .
Эта концепция была первоначально представлена компанией Hitachi как способ улучшить плотность кода конструкции их процессора SuperH RISC при переходе от 16-битных к 32-битным инструкциям в версии SH-5. Новый дизайн имел два набора инструкций: один давал доступ ко всей ISA нового дизайна, а меньший 16-битный набор, известный как SHcompact, позволял программам запускаться в меньших объемах основной памяти . Поскольку память даже самых маленьких систем теперь на порядки больше, чем у систем, породивших эту концепцию, размер больше не является главной проблемой. Сегодня преимущество состоит в том, что это уменьшает количество обращений к основной памяти и тем самым снижает потребление энергии в мобильных устройствах .
Патенты Hitachi были лицензированы компанией Arm Ltd. на их процессоры, где они были известны как «Thumb». Подобные системы встречаются в MIPS16e и PowerPC VLE. Срок действия оригинальных патентов истек, и эту концепцию можно найти в ряде современных проектов, включая RISC-V , который с самого начала разрабатывался для ее использования. Внедрение 64-битных вычислений привело к тому, что этот термин перестал использоваться так широко; эти процессоры обычно используют 32-битные инструкции и технически представляют собой разновидность сжатой ISA, но поскольку они в основном представляют собой модифицированные версии более старой ISA из 32-битной версии того же семейства процессоров; реального сжатия нет.
Концепция
[ редактировать ]Микропроцессоры кодируют свои инструкции как последовательность битов , обычно разделенную на несколько 8-битных байтов . Например, в 6502 MOS ADC
Инструкция выполняет двоичное сложение между значением операнда и значением, уже сохраненным в аккумуляторе . Существует множество мест, где процессор может найти операнд; он может располагаться в основной памяти или на специальной нулевой странице , или быть явной константой, например «10». В каждом из этих вариантов использовалась другая 8-битная инструкция или код операции ; если бы кто-то захотел добавить в аккумулятор константу 10, инструкция была бы закодирована в памяти как $69 $0A
, где $0A является шестнадцатеричным для десятичного значения 10. Если бы вместо этого добавлялось значение, хранящееся в основной памяти по адресу $4400, это было бы $6D $00 $44
, с адресом с прямым порядком байтов . [1]
Обратите внимание, что для второй инструкции требуется три байта, поскольку длина адреса памяти составляет 16 бит. В зависимости от инструкции он может использовать один, два или три байта. [1] Сейчас это известно как набор команд переменной длины , хотя в то время этот термин не был распространен, поскольку большинство процессоров, включая мэйнфреймы и миникомпьютеры , обычно использовали некоторые варианты этой концепции. Даже в конце 1970-х годов, когда микропроцессоры начали переходить от 8-битных форматов к 16-битным, эта концепция оставалась распространенной; Intel 8088 продолжал использовать 8-битные коды операций, за которыми могли следовать от нуля до шести дополнительных байтов в зависимости от режима адресации . [2]
Именно во время перехода к 32-битным системам, особенно когда концепция RISC начала распространяться на разработку процессоров, инструкции переменной длины начали уходить. в архитектуре MIPS Например, все инструкции представляют собой одно 32-битное значение с 6-битным кодом операции в старших битах , а остальные 26 битов используются различными способами, представляя ограниченный набор режимов адресации. Большинство проектов RISC схожи. Переход к формату инструкций фиксированной длины был одной из ключевых концепций проектирования, лежащих в основе производительности ранних проектов RISC; в более ранних системах для чтения инструкции могло потребоваться от одного до шести циклов памяти, что требовало подключения между различными частями логики, чтобы гарантировать, что процессор не попытается выполнить инструкцию до того, как данные будут готовы. В конструкциях RISC операции обычно занимают один цикл, что значительно упрощает декодирование. Экономия в этих схемах блокировки вместо этого применяется к дополнительной логике или добавлению регистров процессора , которые оказывают непосредственное влияние на производительность. [3]
Плотность кода
[ редактировать ]Недостатком подхода RISC является то, что многим инструкциям просто не требуются четыре байта. Например, команда логического сдвига влево сдвигает биты регистра влево. В 6502, который имеет только один арифметический регистр A, эта инструкция может быть полностью представлена ее 8-битным кодом операции. $06
. [1] На процессорах с большим количеством регистров достаточно лишь кода операции и номера регистра, еще 4 или 5 бит. Например, в MIPS инструкции требуется только 6-битный код операции и 5-битный номер регистра. Но, как и в большинстве RISC-проектов, инструкция по-прежнему занимает полные 32 бита. Поскольку такого рода инструкции относительно распространены, программы RISC обычно занимают больше памяти, чем та же программа на процессоре переменной длины. [4]
В 1980-х годах, когда впервые появилась концепция RISC, это было обычным предметом жалоб. Поскольку инструкции занимали больше места, системе приходилось тратить больше времени на чтение инструкций из памяти. Было высказано предположение, что эти дополнительные доступы могут фактически замедлить работу программы. Обширный сравнительный анализ в конечном итоге показал, что RISC работает быстрее почти во всех случаях, и этот аргумент исчез. Однако бывают случаи, когда использование памяти остается проблемой независимо от производительности, и это касается небольших систем и встроенных приложений. Даже в начале 2000-х годов цена DRAM была достаточной, чтобы чувствительные к стоимости устройства имели ограниченный объем памяти. Именно для этого рынка Hitachi разработала дизайн SuperH . [5]
В более ранних версиях SuperH, от SH-1 до SH-4, инструкции всегда занимали 16 бит. Полученный набор команд имеет реальные ограничения; например, он может выполнять только математические операции с двумя операндами в форме A = A + B
, тогда как большинство процессоров той эпохи использовали формат с тремя операндами, A = B + C
. При удалении одного операнда из инструкции удаляются четыре бита (всего 16 регистров, требующих 4 бита), хотя это происходит за счет усложнения написания математического кода. Для рынков, на которые нацелен SuperH, это был простой компромисс. Значительным преимуществом 16-битного формата является то, что кэш инструкций теперь содержит в два раза больше инструкций для любого заданного объема SRAM . Это позволяет системе работать на более высоких скоростях, хотя некоторые из них могут быть смягчены использованием дополнительных инструкций, необходимых для выполнения операций, которые могут выполняться одной инструкцией с тремя операндами. [6]
Для SH-5 Hitachi перешла на 32-битный формат инструкций. Чтобы обеспечить обратную совместимость со своими более ранними разработками, они включили второй набор команд — SHcompact. SHcompact односторонне сопоставил исходные 16-битные инструкции с внутренними 32-битными инструкциями; он не выполнял несколько инструкций, как это было в более ранних процессорах с микрокодированием , это был просто меньший формат для одной и той же инструкции. Это позволило легко переносить оригинальные программы малого формата на новый SH-5, практически не усложняя декодер команд . [7]
ARM лицензировала ряд патентов Hitachi по аспектам разработки инструкций и использовала их для реализации своих инструкций Thumb. Процессоры ARM с буквой «T» в названии включали этот набор команд в дополнение к своим исходным 32-битным версиям и могли переключаться из 32-битного в 16-битный режим «на лету» с помощью команды BX
команда. В режиме Thumb видны только восемь верхних регистров из обычных шестнадцати регистров ARM, но это те же регистры, что и в 32-битном режиме, и поэтому данные могут передаваться между Thumb и обычным кодом с использованием этих регистров. Каждая инструкция Thumb была аналогом 32-битной версии, поэтому Thumb был строгим подмножеством исходной ISA. [8] Одно из ключевых отличий между моделью ARM и SuperH заключается в том, что Thumb сохраняет некоторые инструкции с тремя операндами в 16-битном формате, что достигается за счет уменьшения видимого файла регистров до восьми, поэтому для выбора регистра требуется всего 3 бита. [9]
Архитектура MIPS также добавила аналогичный набор сжатых данных в свой MIPS16e, который очень похож на Thumb. Он также позволяет использовать только восемь регистров, хотя это не просто первые восемь; В конструкции MIPS регистр 0 используется в качестве нулевого регистра , поэтому регистры 0 и 1 в 16-битном режиме вместо этого отображаются на регистры 16 и 17 MIPS32. Большинство других деталей системы аналогичны Thumb. [10] Аналогично, последняя версия Power ISA , ранее называвшаяся PowerPC , включает инструкции «VLE», которые по сути идентичны. Они были добавлены по просьбе компании Freescale Semiconductor , чей интерес к Power в основном направлен на рынок встраиваемых систем. [11]
Современное использование
[ редактировать ]Примерно с 2015 года многие процессоры перешли на 64-битный формат. Обычно они сохраняли 32-битный формат инструкций, расширяя при этом внутренние регистры до 64-битного формата. По первоначальному определению это сжатые инструкции, поскольку они меньше размера основного слова данных. Однако этот термин не используется в данном контексте; ссылки на сжатые инструкции всегда относятся к 16-битным версиям. [12]
Ссылки
[ редактировать ]Цитаты
[ редактировать ]- ^ Перейти обратно: а б с Зелень 2004 .
- ^ «Понимание архитектуры ARM» . ИнформИТ . 23 августа 2010 г.
- ^ Бэкон, Джейсон. «Форматы кода инструкций MIPS» . Информатика 315 Конспект лекций . Архивировано из оригинала 17 июля 2019 г. Проверено 9 апреля 2021 г.
- ^ Уивер и Макки 2009 .
- ^ «Эффекты 16-битных инструкций» . Ренесас .
- ^ СуперХ 1996 .
- ^ Ядро ЦП SH-5, Том 1: Архитектура (PDF) . п. 8.
- ^ Лемье 2004 .
- ^ «Сводка инструкций для большого пальца» . Техническое справочное руководство ARM7TDMI .
- ^ Техническое справочное руководство по расширению для конкретных приложений MIPS16e2 . МИПС. 26 апреля 2016 г.
- ^ Питание ISA V2.07 . ИБМ.
- ^ Справочник по альфа-архитектуре (PDF) . ДЕКАБРЬ. Октябрь 1996 г. с. 1.4.
Библиография
[ редактировать ]- Уивер, Винсент; Макки, Салли (2009). Проблемы плотности кода для новых архитектур (PDF) . МКГД 2009.
- Вертс, Уильям (30 января 2004 г.). «Процессор 6502» (PDF) . Массачусетский университет .
- Лемье, Джо (24 сентября 2004 г.). «Знакомство с большим пальцем ARM» . встроенный .
- Двигатель SuperH RISC SH-1/SH-2 (PDF) . Хитачи Америка. 3 сентября 1996 г.