Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Сжатый набор инструкций , или просто сжатые инструкции , представляют собой вариации на микропроцессорной «ы архитектуры набора команд (ISA) , что позволяет инструкции должны быть представлены в более компактном формате. В большинстве реальных примеров сжатые инструкции имеют длину 16 бит в процессоре, который в противном случае использовал бы 32-битные инструкции. Это отличается от концепции инструкций переменной длины , где любая инструкция может иметь любую длину; в сжатом наборе инструкции представляют собой альтернативные формы для существующих 32-разрядных версий.

Первоначально эта концепция была представлена Hitachi в 1980-х годах как способ улучшить плотность кода их процессора SuperH RISC и тем самым позволить программам работать в меньших объемах основной памяти . Сегодня эти небольшие инструкции известны как SHcompact. Поскольку память даже самых маленьких систем теперь на несколько порядков больше, это больше не является главной проблемой; сегодня преимущество состоит в том, что он уменьшает количество обращений к основной памяти и, таким образом, снижает потребление энергии в мобильных устройствах . Патенты Hitachi были лицензированы Arm Ltd. для своих процессоров, где они были известны как «Thumb». Подобные системы есть в MIPS16e и Power ISA.

Внедрение 64-битных вычислений привело к тому, что этот термин больше не используется так широко; эти процессоры обычно используют 32-битные инструкции и технически являются формой сжатого ISA, но поскольку они в основном являются модифицированными версиями более старого 32-битного ISA из 32-битной версии того же семейства процессоров, реального сжатия нет. Срок действия оригинальных патентов истек, и эту концепцию можно найти в ряде современных разработок, включая RISC-V , который с самого начала разрабатывался для его использования.

Концепция [ править ]

Микропроцессоры кодируют свои инструкции как последовательность битов , обычно разделенных на несколько 8-битных байтов . К примеру, в МОП - 6502 , то ADCкоманда выполняет двоичный сложение между значением операнда и значение уже хранится в накопителе . Есть множество мест, где процессор может найти операнд; он может находиться в основной памяти, на специальной «нулевой странице» или быть явной константой, например «10». В каждом из этих вариантов использовалась отдельная 8-битная инструкция или код операции ; если кто-то хочет добавить константу $ 04 в аккумулятор, инструкция будет закодирована в памяти как$69 $04, тогда как если бы он складывал значение, хранящееся в основной памяти по адресу $ 4400, это было бы $6D $0044с прямым порядком байтов . [1]

Обратите внимание, что для второй инструкции требуется три байта, потому что адрес памяти имеет длину 16 бит. В зависимости от инструкции он может использовать один, два или три байта. [1] Теперь это известно как набор команд переменной длины , хотя в то время этот термин не был распространен, поскольку в большинстве процессоров, включая мэйнфреймы и миникомпьютеры , использовались некоторые вариации этой концепции. Даже в конце 1970-х, когда микропроцессоры начали переходить с 8-битных форматов на 16, эта концепция оставалась распространенной; Intel 8088 продолжал использовать 8-битные опкоды , которые могут быть затем нуль шесть дополнительных байтами в зависимости от режима адресации . [2]

Это было во время перехода на 32-битные системы, и особенно когда концепция RISC начала преобладать над дизайном процессоров, инструкции переменной длины начали исчезать. Например, в архитектуре MIPS все инструкции представляют собой одно 32-битное значение с 6-битным кодом операции в наиболее значимых битах.а остальные 26 битов используются различными способами, представляя ограниченный набор режимов адресации. Большинство проектов RISC схожи. Переход к формату инструкций фиксированной длины был одной из ключевых концепций дизайна, лежащих в основе производительности ранних проектов RISC; в более ранних системах для чтения инструкции могло потребоваться от одного до шести циклов памяти, что требовало подключения между различными частями логики, чтобы процессор не пытался выполнить инструкцию до того, как данные были готовы. В проектах RISC операции обычно занимают один цикл, что значительно упрощает декодирование. Экономия в этих схемах блокировки вместо этого применяется к дополнительной логике или добавлению регистров процессора , которые имеют прямое влияние на производительность. [3]

Плотность кода [ править ]

Обратной стороной подхода RISC является то, что многие инструкции просто не требуют четырех байтов. Например, команда «Логический сдвиг влево» сдвигает биты в регистре влево и требует только кода операции и номера регистра. В 6502, который имеет единственный арифметический регистр A и, следовательно, не нуждается даже в номере регистра, ASLинструкция занимает один байт. [1] Теоретически для этой же операции MIPS требуется только 6-битный код операции и 5-битный номер регистра, но в этом случае инструкция по-прежнему занимает все 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, но это одни и те же регистры, и, таким образом, данные могут передаваться между Thumb и обычным кодом, используя их. Каждая инструкция Thumb была аналогом 32-битной версии, поэтому Thumb был строгим подмножеством исходной ISA. [8]Одно из ключевых различий между моделью ARM и SuperH заключается в том, что Thumb сохраняет больше инструкций в формате с тремя операндами, что достигается за счет уменьшения файла регистров, поэтому для выбора регистра требуется только 3 бита. [9]

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

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

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

Ссылки [ править ]

Цитаты [ править ]

  1. ^ а б в Вертс 2004 .
  2. ^ «Понимание архитектур ARM» . informIT . 23 августа 2010 г.
  3. ^ Бэкон, Джейсон. «Форматы кода инструкций MIPS» . Компьютерные науки 315 Конспект лекций .
  4. Перейти ↑ Weaver & McKee 2009 .
  5. ^ «Эффекты 16-битных инструкций» . Renesas .
  6. ^ SuperH 1996 .
  7. ^ Ядро процессора SH-5, Том 1: Архитектура (PDF) . п. 8.
  8. Перейти ↑ Lemieux 2004 .
  9. ^ "Краткое изложение инструкций" . ARM7TDMI Техническое справочное руководство .
  10. ^ MIPS16e2 Техническое справочное руководство по расширению для конкретного приложения . MIPS. 26 апреля 2016 г.
  11. ^ Power ISA V2.07 . IBM.

Библиография [ править ]

  • Уивер, Винсент; Макки, Салли (2009). Проблемы плотности кода для новых архитектур (PDF) . ICCD 2009.
  • Вертс, Уильям (30 января 2004 г.). "Процессор 6502" (PDF) . Массачусетский университет .
  • Лемье, Джо (24 сентября 2004 г.). «Введение в большой палец руки» . встроенный .
  • Двигатель SuperH RISC SH-1 / SH-2 (PDF) . Hitachi America. 3 сентября 1996 г.