Сжатый набор инструкций

Компактный формат инструкций микропроцессора

Сжатый набор инструкций или просто сжатые инструкции — это разновидность архитектуры набора инструкций микропроцессора ( 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-битных байтов . Например, в MOS 6502 инструкция 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 является то, что многие инструкции просто не требуют четырех байтов. Например, инструкция Logical Shift Left сдвигает биты в регистре влево. В 6502, который имеет только один арифметический регистр A, эта инструкция может быть представлена ​​полностью ее 8-битным кодом операции $06. [1] На процессорах с большим количеством регистров все, что нужно, это код операции и номер регистра, еще 4 или 5 бит. На MIPS, например, инструкции требуется только 6-битный код операции и 5-битный номер регистра. Но, как и в случае большинства конструкций RISC, инструкция по-прежнему занимает полные 32 бита. Поскольку такие виды инструкций относительно распространены, программы RISC обычно занимают больше памяти, чем та же программа на процессоре переменной длины. [4]

Одним из заметных и особенно ранних исключений среди конструкций RISC является архитектура IBM 801 , которая поддерживает пять форматов инструкций: два с длиной инструкции 16 бит и три с длиной инструкции 32 бита. [5] : 10  Для инструкций, требующих меньше места, таких как инструкции сдвига, использующие только операнды регистра, используются более короткие форматы инструкций 16 бит. [5] : 51–58 

В 1980-х годах, когда впервые появилась концепция RISC, увеличение размера программы было распространенным пунктом жалоб. Поскольку инструкции занимали больше места, системе приходилось тратить больше времени на чтение инструкций из памяти. Было высказано предположение, что эти дополнительные обращения могут фактически замедлить программу. Обширное тестирование в конечном итоге показало, что RISC был быстрее почти во всех случаях, и этот аргумент исчез. Однако есть случаи, когда использование памяти остается проблемой независимо от производительности, и это касается небольших систем и встроенных приложений. Даже в начале 2000-х годов цена DRAM была достаточно высокой, чтобы чувствительные к стоимости устройства имели ограниченный объем памяти. Именно для этого рынка Hitachi разработала конструкцию SuperH . [6]

В более ранних конструкциях SuperH, SH-1 через SH-4, инструкции всегда занимали 16 бит. Полученный набор инструкций имеет реальные ограничения; например, он может выполнять только двухоперандную математику формы A = A + B, тогда как большинство процессоров той эпохи использовали трехоперандный формат, A = B + C. При удалении одного операнда из инструкции удаляются четыре бита (имеется 16 регистров, требующих 4 бита), хотя это происходит за счет того, что математический код становится несколько сложнее для написания. Для рынков, на которые нацелен SuperH, это был простой компромисс. Значительным преимуществом 16-битного формата является то, что кэш инструкций теперь содержит в два раза больше инструкций для любого заданного объема SRAM . Это позволяет системе работать на более высоких скоростях, хотя часть этого может быть смягчена использованием дополнительных инструкций, необходимых для выполнения операций, которые могут быть выполнены одной инструкцией из 3 операндов. [7]

Для SH-5 Hitachi перешла на 32-битный формат инструкций. Чтобы обеспечить обратную совместимость с более ранними разработками, они включили второй набор инструкций, SHcompact. SHcompact отображал исходные 16-битные инструкции однонаправленно на внутреннюю 32-битную инструкцию; он не выполнял несколько инструкций, как это было бы в более ранних микрокодированных процессорах, это был просто меньший формат для той же инструкции. Это позволило легко переносить исходные программы малого формата на новый SH-5, при этом немного усложняя декодер инструкций . [8]

ARM лицензировала ряд патентов Hitachi по аспектам дизайна инструкций и использовала их для реализации своих инструкций Thumb. Процессоры ARM с буквой «T» в названии включали этот набор инструкций в дополнение к своим исходным 32-битным версиям и могли переключаться из 32-битного в 16-битный режим на лету с помощью BXкоманды. В режиме Thumb видны только верхние восемь регистров из обычных шестнадцати регистров ARM, но это те же регистры, что и в 32-битном режиме, и, таким образом, данные могут передаваться между Thumb и обычным кодом с помощью этих регистров. Каждая инструкция Thumb была аналогом 32-битной версии, поэтому Thumb был строгим подмножеством исходной ISA. [9] Одним из ключевых отличий между моделью ARM и SuperH является то, что Thumb сохраняет некоторые инструкции с тремя операндами в 16-битном формате, что было достигнуто путем сокращения видимого файла регистров до восьми, поэтому для выбора регистра требуется всего 3 бита. [10]

Архитектура MIPS также добавила аналогичный сжатый набор в их MIPS16e, который очень похож на Thumb. Он также позволяет использовать только восемь регистров, хотя это не просто первые восемь; конструкция MIPS использует регистр 0 как нулевой регистр , поэтому регистры 0 и 1 в 16-битном режиме вместо этого отображаются на регистры MIPS32 16 и 17. Большинство других деталей системы похожи на Thumb. [11] Аналогично, последняя версия Power ISA , ранее PowerPC , включает инструкции "VLE", которые по сути идентичны. Они были добавлены по просьбе Freescale Semiconductor , чей интерес к Power в основном направлен на рынок встраиваемых систем. [12]

Современное использование

Начиная примерно с 2015 года многие процессоры перешли на 64-битный формат. Они, как правило, сохранили 32-битный формат инструкций, при этом расширив внутренние регистры до 64-битного формата. По первоначальному определению, это сжатые инструкции, так как они меньше базового размера слова данных. Однако этот термин не используется в этом контексте; ссылки на сжатые инструкции неизменно относятся к 16-битным версиям. [13]

Ссылки

Цитаты

  1. ^ abc Verts 2004.
  2. ^ «Понимание архитектуры ARM». informIT . 23 августа 2010 г.
  3. ^ Бэкон, Джейсон. "Форматы кода инструкций MIPS". Computer Science 315 Lecture Notes . Архивировано из оригинала 2019-07-17 . Получено 2021-04-09 .
  4. ^ Уивер и Макки 2009.
  5. ^ ab System 801 Principles of Operation (PDF) . International Business Machines. 16 января 1976 г. Получено 11 ноября 2024 г.
  6. ^ "Эффекты 16-битных инструкций". Renesas .
  7. ^ СуперХ 1996.
  8. ^ Ядро процессора SH-5, Том 1: Архитектура (PDF) . стр. 8.
  9. ^ Лемье 2004.
  10. ^ "Сводка инструкций большого пальца". Техническое справочное руководство ARM7TDMI .
  11. ^ Техническое справочное руководство по расширению приложений MIPS16e2 . MIPS. 26 апреля 2016 г.
  12. ^ Power ISA V2.07. IBM.
  13. ^ Alpha Architecture Handbook (PDF) . ДЕКАБРЬ. Октябрь 1996. стр. 1.4.

Библиография

  • Уивер, Винсент; Макки, Салли (2009). Проблемы плотности кода для новых архитектур (PDF) . ICCD 2009.
  • Вертс, Уильям (30 января 2004 г.). "Процессор 6502" (PDF) . Массачусетский университет .
  • Лемье, Джо (24 сентября 2004 г.). «Введение в ARM thumb». встроенный .
  • SuperH RISC Engine SH-1/SH-2 (PDF) . Hitachi America. 3 сентября 1996 г.
Получено с "https://en.wikipedia.org/w/index.php?title=Compressed_instruction_set&oldid=1257034808"