stringtranslate.com

Архитектура набора команд

В информатике архитектура набора команд ( ISA ) является частью абстрактной модели компьютера , которая обычно определяет , как программное обеспечение управляет процессором. [1] Устройство, которое выполняет инструкции, описанные в этом ISA, например центральный процессор (ЦП), называется реализацией .

В общем, ISA определяет поддерживаемые инструкции , типы данных , регистры , аппаратную поддержку для управления основной памятью , фундаментальные функции (такие как согласованность памяти , режимы адресации , виртуальная память ) и модель ввода/вывода семейства реализаций. ИСА.

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

Если операционная система поддерживает стандартный и совместимый двоичный интерфейс приложений (ABI) для конкретной ISA, машинный код будет выполняться в будущих реализациях этой ISA и операционной системы. Однако если ISA поддерживает работу нескольких операционных систем, это не гарантирует, что машинный код для одной операционной системы будет работать в другой операционной системе, если только первая операционная система не поддерживает запуск машинного кода, созданного для другой операционной системы.

ISA можно расширить, добавив инструкции или другие возможности или добавив поддержку больших адресов и значений данных; реализация расширенного ISA по-прежнему сможет выполнять машинный код для версий ISA без этих расширений. Машинный код, использующий эти расширения, будет работать только в реализациях, поддерживающих эти расширения.

Обеспечиваемая ими двоичная совместимость делает ISA одной из самых фундаментальных абстракций в вычислениях .

Обзор

Архитектура набора команд отличается от микроархитектуры , которая представляет собой набор методов проектирования процессора , используемых в конкретном процессоре для реализации набора команд. Процессоры с разными микроархитектурами могут использовать общий набор команд. Например, Intel Pentium и AMD Athlon реализуют почти идентичные версии набора инструкций x86 , но имеют совершенно разную внутреннюю структуру.

Концепция архитектуры , отличающаяся от проектирования конкретной машины, была разработана Фредом Бруксом из IBM на этапе проектирования System/360 .

До NPL [System/360] проектировщики компьютеров компании могли свободно учитывать цели по затратам не только путем выбора технологий, но и путем внесения функциональных и архитектурных усовершенствований. Цель совместимости SPREAD, напротив, постулировала единую архитектуру для серии из пяти процессоров, охватывающую широкий диапазон стоимости и производительности. Ни одна из пяти групп инженеров-проектировщиков не могла рассчитывать на то, что сможет внести коррективы в архитектурные спецификации как способ облегчить трудности в достижении целей по стоимости и производительности. [2] : стр. 137 

Некоторые виртуальные машины , которые поддерживают байт-код в качестве ISA, такие как Smalltalk , виртуальная машина Java и Common Language Runtime от Microsoft , реализуют это путем перевода байт-кода для часто используемых путей кода в собственный машинный код. Кроме того, эти виртуальные машины путем интерпретации выполняют менее часто используемые пути кода (см.: Компиляция «точно в срок» ). Таким образом компания Transmeta реализовала набор инструкций x86 на процессорах VLIW .

Классификация МСА

ISA можно классифицировать по-разному. Распространенной классификацией является архитектурная сложность . Компьютер со сложным набором команд (CISC) имеет множество специализированных инструкций, некоторые из которых редко используются в практических программах. Компьютер с сокращенным набором команд (RISC) упрощает процессор за счет эффективной реализации только тех инструкций, которые часто используются в программах, в то время как менее распространенные операции реализуются как подпрограммы, в результате чего дополнительное время выполнения процессора компенсируется нечастым использованием. [3]

Другие типы включают в себя архитектуры очень длинных командных слов (VLIW), а также тесно связанные с ними архитектуры длинных командных слов ( LIW ) и архитектуры вычислений с явно параллельными командами (EPIC). Эти архитектуры стремятся использовать параллелизм на уровне инструкций с меньшим количеством аппаратного обеспечения, чем RISC и CISC, возлагая ответственность за выдачу инструкций и планирование на компилятор . [4]

Были изучены архитектуры еще меньшей сложности, такие как компьютер с минимальным набором команд (MISC) и компьютер с одним набором команд (OISC). Это теоретически важные типы, но они не были коммерциализированы. [5] [6]

инструкции

Машинный язык состоит из дискретных операторов или инструкций . В архитектуре обработки данная инструкция может указывать:

регистры
буквальные/постоянные значения
режимы адресации , используемые для доступа к памяти

Более сложные операции создаются путем объединения этих простых инструкций, которые выполняются последовательно или в соответствии с другими инструкциями потока управления .

Типы инструкций

Примеры операций, общих для многих наборов команд, включают:

Обработка данных и операции с памятью

Арифметические и логические операции

Операции потока управления

Инструкции сопроцессора

Сложные инструкции

Процессоры могут включать в свой набор команд «сложные» инструкции. Одна «сложная» инструкция делает то, что может потребовать выполнения множества инструкций на других компьютерах. Такие инструкции типичны для инструкций, которые выполняют несколько шагов, управляют несколькими функциональными блоками или иным образом появляются в большем масштабе, чем основная часть простых инструкций, реализуемых данным процессором. Некоторые примеры «сложных» инструкций включают в себя:

Сложные инструкции чаще встречаются в наборах инструкций CISC, чем в наборах инструкций RISC, но наборы инструкций RISC также могут включать их. Наборы инструкций RISC обычно не включают в себя операции ALU с операндами памяти или инструкции для перемещения больших блоков памяти, но большинство наборов инструкций RISC включают SIMD или векторные инструкции, которые выполняют одну и ту же арифметическую операцию с несколькими частями данных одновременно. Инструкции SIMD позволяют манипулировать большими векторами и матрицами за минимальное время. Инструкции SIMD позволяют легко распараллеливать алгоритмы, обычно используемые при обработке звука, изображения и видео. Различные реализации SIMD были выведены на рынок под торговыми марками, такими как MMX , 3DNow! и АлтиВек .

Кодирование инструкций

Одна инструкция может иметь несколько полей, идентифицирующих логическую операцию, а также может включать адреса источника и назначения и константные значения. Это инструкция MIPS «Добавить немедленно», которая позволяет выбирать регистры источника и назначения и включать небольшую константу.

В традиционных архитектурах инструкция включает в себя код операции , определяющий выполняемую операцию, например добавление содержимого памяти в регистр , а также ноль или более спецификаторов операндов , которые могут указывать регистры , ячейки памяти или литеральные данные. Спецификаторы операндов могут иметь режимы адресации , определяющие их значение, или могут находиться в фиксированных полях. В архитектурах с очень длинным командным словом (VLIW), которые включают в себя множество архитектур микрокода , в одной инструкции указывается несколько одновременных кодов операций и операндов.

Некоторые экзотические наборы команд не имеют поля кода операции, например архитектуры, запускаемые транспортом (TTA), только операнды.

Большинство стековых машин имеют наборы инструкций с « 0 операндами », в которых для арифметических и логических операций отсутствуют поля спецификатора операнда; только инструкции, которые помещают операнды в стек вычислений или извлекают операнды из стека в переменные, имеют спецификаторы операндов. Набор команд выполняет большинство действий ALU с помощью постфиксных операций ( обратной польской записи ), которые работают только со стеком выражений , а не с регистрами данных или произвольными ячейками основной памяти. Это может быть очень удобно для компиляции языков высокого уровня, поскольку большинство арифметических выражений можно легко перевести в постфиксную нотацию. [8]

Условные инструкции часто имеют поле предиката — несколько битов, которые кодируют конкретное условие, вызывающее выполнение операции, а не ее невыполнение. Например, инструкция условного перехода передает управление, если условие истинно, так что выполнение переходит к другой части программы, и не передает управление, если условие ложно, так что выполнение продолжается последовательно. Некоторые наборы команд также имеют условные перемещения, поэтому перемещение будет выполнено, а данные будут сохранены в целевой позиции, если условие истинно, и не будут выполнены, а целевая позиция не будет изменена, если условие ложно. Аналогично, IBM z/Architecture имеет инструкцию условного сохранения. Некоторые наборы команд включают в себя поле предиката в каждой инструкции; это называется предикацией ветвления .

Количество операндов

Наборы инструкций можно классифицировать по максимальному количеству операндов, явно указанному в инструкциях.

(В следующих примерах a , b и c — это (прямые или вычисляемые) адреса, относящиеся к ячейкам памяти, а reg1 и т. д. относятся к машинным регистрам.)

С = А+В

Из-за большого количества битов, необходимых для кодирования трех регистров инструкции с 3 операндами, RISC-архитектуры с 16-битными инструкциями всегда представляют собой конструкции с 2 операндами, такие как Atmel AVR, TI MSP430 и некоторые версии ARM Thumb. . RISC-архитектуры с 32-битными инструкциями обычно представляют собой конструкции с 3 операндами, такие как архитектуры ARM , AVR32 , MIPS , Power ISA и SPARC .

Каждая инструкция явно определяет некоторое количество операндов (регистров, ячеек памяти или непосредственных значений) . Некоторые инструкции задают один или оба операнда неявно, например, сохраняя их на вершине стека или в неявном регистре. Если некоторые операнды заданы неявно, в инструкции необходимо указать меньше операндов. Когда «операнд назначения» явно указывает пункт назначения, необходимо указать дополнительный операнд. Следовательно, количество операндов, закодированных в инструкции, может отличаться от математически необходимого количества аргументов для логической или арифметической операции (арности ) . Операнды либо кодируются в виде «кода операции» инструкции, либо задаются в виде значений или адресов, следующих за кодом операции.

Регистрация давления

Давление регистров измеряет доступность свободных регистров в любой момент времени выполнения программы. Нагрузка на регистры высока, когда используется большое количество доступных регистров; таким образом, чем выше давление регистра, тем чаще содержимое регистра должно быть перенесено в память. Увеличение количества регистров в архитектуре снижает нагрузку на регистры, но увеличивает стоимость. [12]

В то время как встроенные наборы команд, такие как Thumb, страдают от чрезвычайно высокой нагрузки на регистры из-за небольших наборов регистров, RISC ISA общего назначения, такие как MIPS и Alpha , имеют низкую нагрузку на регистры. CISC ISA, такие как x86-64, обеспечивают низкую нагрузку на регистры, несмотря на меньшие наборы регистров. Это связано с множеством режимов адресации и оптимизаций (таких как адресация подрегистров, операнды памяти в инструкциях ALU, абсолютная адресация, адресация относительно ПК и разливы между регистрами), которые предлагают CISC ISA. [13]

Длина инструкции

Размер или длина инструкции широко варьируются: от четырех бит в некоторых микроконтроллерах до многих сотен бит в некоторых системах VLIW . Процессоры, используемые в персональных компьютерах , мэйнфреймах и суперкомпьютерах , имеют минимальные размеры команд от 8 до 64 бит. Самая длинная инструкция на x86 — 15 байт (120 бит). [14] В наборе команд разные команды могут иметь разную длину. В некоторых архитектурах, особенно в большинстве компьютеров с сокращенным набором команд (RISC),Инструкции имеют фиксированную длину , обычно соответствующую размеру слова данной архитектуры. В других архитектурах инструкции имеют переменную длину , обычно кратную байту или полуслову . Некоторые из них, например ARM с расширением Thumb , имеют смешанную кодировку переменных, то есть две фиксированные, обычно 32-битную и 16-битную кодировку, где инструкции не могут свободно смешиваться, а должны переключаться между ними на ветке (или границе исключения в ARMv8). ).

Инструкции фиксированной длины менее сложны в обработке, чем инструкции переменной длины, по нескольким причинам (нет необходимости проверять, пересекает ли инструкция границу строки кэша или страницы виртуальной памяти, [11] ), и поэтому их несколько легче оптимизировать. скорость.

Плотность кода

В компьютерах начала 1960-х годов основная память была дорогой и очень ограниченной, даже на мэйнфреймах. Минимизация размера программы, чтобы убедиться, что она уместится в ограниченной памяти, часто была центральной задачей. Таким образом, размер инструкций, необходимых для выполнения конкретной задачи, — плотность кода — был важной характеристикой любого набора команд. Это по-прежнему важно для первоначально крошечных воспоминаний миникомпьютеров, а затем и микропроцессоров. Плотность остается важной и сегодня для приложений для смартфонов, приложений, загружаемых в браузеры через медленное подключение к Интернету, а также в ПЗУ для встроенных приложений. Более общим преимуществом повышенной плотности является повышение эффективности кэшей и предварительной выборки инструкций.

Компьютеры с высокой плотностью кода часто имеют сложные инструкции для ввода процедур, параметризованных возвратов, циклов и т. д. (поэтому задним числом они называются компьютерами с комплексным набором инструкций , CISC ). Однако более типичные или частые инструкции «CISC» просто сочетают базовую операцию ALU, такую ​​​​как «добавление», с доступом к одному или нескольким операндам в памяти (с использованием таких режимов адресации , как прямая, косвенная, индексированная и т. д.). . Некоторые архитектуры могут допускать размещение двух или трех операндов (включая результат) непосредственно в памяти или могут выполнять такие функции, как автоматическое приращение указателя и т. д. Наборы программно-реализованных команд могут содержать еще более сложные и мощные инструкции.

Компьютеры с сокращенным набором команд , RISC , были впервые широко внедрены в период быстрого роста подсистем памяти. Они жертвуют плотностью кода ради упрощения схемы реализации и пытаются повысить производительность за счет более высоких тактовых частот и большего количества регистров. Одна инструкция RISC обычно выполняет только одну операцию, например «добавление» регистров или «загрузку» из ячейки памяти в регистр. Набор инструкций RISC обычно имеет фиксированную длину, тогда как типичный набор инструкций CISC имеет инструкции различной длины. Однако, поскольку RISC-компьютерам обычно требуется больше и зачастую более длинные инструкции для реализации конкретной задачи, они по своей сути менее оптимально используют полосу пропускания шины и кэш-память.

Некоторые встроенные RISC ISA, такие как Thumb и AVR32, обычно демонстрируют очень высокую плотность благодаря технологии, называемой сжатием кода. Этот метод упаковывает две 16-битные инструкции в одно 32-битное слово, которое затем на этапе декодирования распаковывается и выполняется как две инструкции. [15]

Компьютеры с минимальным набором команд (MISC) обычно представляют собой разновидность стековой машины , в которой имеется несколько отдельных инструкций (8–32), так что несколько инструкций можно уместить в одно машинное слово. Для реализации этих типов ядер часто требуется мало кремния, поэтому их можно легко реализовать в FPGA или в многоядерной форме. Плотность кода MISC аналогична плотности кода RISC; Увеличение плотности команд компенсируется тем, что для выполнения задачи требуется больше примитивных инструкций. [16] [ не удалось проверить ]

Было проведено исследование сжатия исполняемых файлов как механизма повышения плотности кода. Математика колмогоровской сложности описывает проблемы и ограничения этого процесса.

На практике плотность кода также зависит от компилятора . Большинство оптимизирующих компиляторов имеют параметры, которые определяют, следует ли оптимизировать генерацию кода по скорости выполнения или по плотности кода. Например, у GCC есть опция -Os для оптимизации небольшого размера машинного кода и -O3 для оптимизации скорости выполнения за счет более крупного машинного кода.

Представление

Инструкции, составляющие программу, редко указываются с использованием их внутренней числовой формы ( машинного кода ); они могут быть заданы программистами, использующими язык ассемблера , или, что чаще, могут быть сгенерированы компиляторами из языков программирования высокого уровня . [17]

Дизайн

Проектирование наборов команд является сложной проблемой. В истории микропроцессора было два этапа. Первым был CISC (компьютер со сложным набором инструкций), который содержал множество различных инструкций. Однако в 1970-х годах такие компании, как IBM, провели исследование и обнаружили, что многие инструкции из набора можно исключить. Результатом стал RISC (компьютер с сокращенным набором инструкций) — архитектура, использующая меньший набор инструкций. Более простой набор команд может обеспечить более высокую скорость, уменьшить размер процессора и снизить энергопотребление. Однако более сложный набор может оптимизировать общие операции, повысить эффективность памяти и кэша или упростить программирование.

Некоторые разработчики набора команд резервируют один или несколько кодов операций для какого-либо системного вызова или программного прерывания . Например, MOS Technology 6502 использует 00 H , Zilog Z80 использует восемь кодов C7,CF,D7,DF,E7,EF,F7,FF H [ 18] , а Motorola 68000 использует коды в диапазоне A000..AFFF H.

Быстрые виртуальные машины гораздо проще реализовать, если набор инструкций соответствует требованиям виртуализации Попека и Голдберга . [ нужны разъяснения ]

Слайд NOP , используемый в программировании с учетом иммунитета, гораздо проще реализовать, если «незапрограммированное» состояние памяти интерпретируется как NOP . [ сомнительно ]

В системах с несколькими процессорами неблокирующие алгоритмы синхронизации гораздо проще реализовать, если набор инструкций включает поддержку таких операций, как « выборка и добавление », « условная загрузка/сохранение » (LL/ SC), или «атомарное сравнение и замена ».

Реализация набора инструкций

Данный набор команд может быть реализован различными способами. Все способы реализации определенного набора инструкций обеспечивают одну и ту же модель программирования , и все реализации этого набора инструкций могут запускать одни и те же исполняемые файлы. Различные способы реализации набора команд дают разные компромиссы между стоимостью, производительностью, энергопотреблением, размером и т. д.

При проектировании микроархитектуры процессора инженеры используют блоки «жесткой» электронной схемы (часто спроектированные отдельно), такие как сумматоры, мультиплексоры, счетчики, регистры, АЛУ и т. д. Затем для описания часто используется какой-то язык передачи регистров. декодирование и упорядочивание каждой инструкции ISA с использованием этой физической микроархитектуры. Существует два основных способа построения блока управления для реализации этого описания (хотя во многих конструкциях используются промежуточные пути или компромиссы):

  1. В некоторых компьютерных конструкциях «жестко запрограммировано» полное декодирование и упорядочение набора команд (как и остальная часть микроархитектуры).
  2. В других конструкциях для этого используются процедуры или таблицы микрокода (или и то, и другое), используя ПЗУ или перезаписываемое ОЗУ ( перезаписываемое хранилище управления ), PLA или и то, и другое.

Некоторые конструкции ЦП с микрокодированием и записываемым хранилищем управления используют его для изменения набора команд (например, процессор Rekursiv и Imsys Cjip). [19]

ЦП, предназначенные для реконфигурируемых вычислений , могут использовать программируемые пользователем вентильные матрицы (FPGA).

ISA также может быть эмулирована программно с помощью интерпретатора . Естественно, из-за накладных расходов на интерпретацию, это медленнее, чем прямой запуск программ на эмулируемом оборудовании, если только оборудование, на котором работает эмулятор, не на порядок быстрее. Сегодня поставщики новых ISA или микроархитектур обычно предоставляют программные эмуляторы разработчикам программного обеспечения до того, как будет готова аппаратная реализация.

Часто детали реализации оказывают сильное влияние на конкретные инструкции, выбранные для набора команд. Например, многие реализации конвейера команд допускают только одну загрузку или сохранение памяти для каждой инструкции, что приводит к архитектуре загрузки-сохранения (RISC). Другой пример: некоторые ранние способы реализации конвейера команд приводили к использованию слота задержки .

Требования высокоскоростной цифровой обработки сигналов толкнули в противоположном направлении — вынудили выполнять инструкции определенным образом. Например, чтобы выполнять цифровые фильтры достаточно быстро, инструкция MAC в типичном процессоре цифровых сигналов (DSP) должна использовать своего рода гарвардскую архитектуру , которая может извлекать команду и два слова данных одновременно, и для этого требуется одноцикловое умножение-накопление. множитель .

Смотрите также

Рекомендации

  1. ^ «ГЛОССАРИЙ: Архитектура набора команд (ISA)» . Arm.com . Архивировано из оригинала 11 ноября 2023 г. Проверено 3 февраля 2024 г.
  2. ^ Пью, Эмерсон В.; Джонсон, Лайл Р.; Палмер, Джон Х. (1991). Системы IBM 360 и Early 370 . МТИ Пресс. ISBN 0-262-16123-0.
  3. ^ Кристал Чен; Грег Новик; Кирк Шимано (16 декабря 2006 г.). «Архитектура RISC: RISC против CISC». cs.stanford.edu . Проверено 21 февраля 2015 г.
  4. ^ Шланскер, Майкл С.; Рау, Б. Рамакришна (февраль 2000 г.). «EPIC: Вычисление явно параллельных инструкций». Компьютер . 33 (2). дои : 10.1109/2.820037.
  5. ^ Шаут, Аднан; Элдос, Тайсир (лето 2003 г.). «О классификации компьютерной архитектуры». Международный журнал науки и технологий . 14 :3 . Проверено 2 марта 2023 г.
  6. ^ Гилрит, Уильям Ф.; Лапланте, Филип А. (6 декабря 2012 г.). Компьютерная архитектура: минималистский взгляд . Springer Science+Business Media . ISBN 978-1-4615-0237-1.
  7. ^ ab Hennessy & Patterson 2003, стр. 108.
  8. ^ Дюран, Поль. «Архитектура набора команд (ISA)». Введение в информатику CS 0 .
  9. ^ Хеннесси и Паттерсон 2003, с. 92.
  10. ^ ab Hennessy & Patterson 2003, стр. 93.
  11. ^ abc Кок, Джон; Маркштейн, Виктория (январь 1990 г.). «Эволюция технологии RISC в IBM» (PDF) . Журнал исследований и разработок IBM . 34 (1): 4–11. дои :10.1147/rd.341.0004 . Проверено 5 октября 2022 г.
  12. ^ Пейдж, Дэниел (2009). «11. Составители». Практическое введение в архитектуру компьютера . Спрингер. п. 464. Бибкод : 2009pica.book.....P. ISBN 978-1-84882-255-9.
  13. ^ Венкат, Ашиш; Таллсен, Дин М. (2014). Использование разнообразия ISA: проектирование мультипроцессора с гетерогенной ISA. 41-й ежегодный международный симпозиум по компьютерной архитектуре.
  14. ^ «Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32» . Корпорация Интел . Проверено 5 октября 2022 г.
  15. ^ Уивер, Винсент М.; Макки, Салли А. (2009). Проблемы плотности кода для новых архитектур . Международная конференция IEEE по компьютерному дизайну. CiteSeerX 10.1.1.398.1967 . дои : 10.1109/ICCD.2009.5413117. 
  16. ^ «RISC против CISC». cs.stanford.edu . Проверено 18 декабря 2021 г.
  17. ^ Хеннесси и Паттерсон 2003, с. 120.
  18. Ганссл, Джек (26 февраля 2001 г.). «Проактивная отладка». Embedded.com .
  19. ^ «Великие микропроцессоры прошлого и настоящего (V 13.4.0)» . cpushack.net . Проверено 25 июля 2014 г.

дальнейшее чтение

Внешние ссылки