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

В компьютерной технике , ортогональный набор команд является набор команд со, где все типы команд могут использовать все режимы адресации . Он « ортогонален » в том смысле, что тип команды и режим адресации меняются независимо. Ортогональный набор команд не накладывает ограничения, требующие, чтобы определенная инструкция использовала определенный регистр [1], поэтому существует небольшое перекрытие функциональных возможностей инструкций. [2]

Ортогональность считалась основной целью разработчиков процессоров в 1970-х годах, и VAX-11 часто используется в качестве эталона для этой концепции. Однако внедрение философии дизайна RISC в 1980-х годах значительно изменило тенденцию к большей ортогональности. Современные процессоры часто моделируют ортогональность на этапе предварительной обработки перед выполнением фактических задач в RISC-подобном ядре.

Основные понятия [ править ]

По своей сути, все компьютеры общего назначения работают одинаково; данные, хранящиеся в основной памяти , считываются центральным процессором (ЦП) в быструю временную память (например, регистры ЦП ), обрабатываются , а затем записываются обратно в основную память. Память состоит из набора значений данных, закодированных как числа [a] и называемых их адресами , а также числовых значений. Это означает, что те же операции, применяемые к данным, могут быть применены к самим адресам. [b] Во время работы данные могут временно храниться в регистрах процессора., значения блокнота, к которым можно получить очень быстрый доступ. Регистры используются, например, при суммировании строк чисел в итог. [3]

Одиночная инструкция, единственный операнд [ править ]

В ранних компьютерах архитектура набора команд (ISA) часто использовала один регистр, и в этом случае он был известен как аккумулятор . Инструкции включали адрес для операнда. Например, инструкция заставит ЦП извлечь число в памяти, найденное по этому адресу, а затем добавить его к значению, уже находящемуся в аккумуляторе. Этот очень простой пример ISA имеет "одноадресный формат", потому что каждая инструкция включает адрес данных. [4]ADD address

Недостаток одноадресных машин состоит в том, что даже простые действия, такие как сложение, требуют нескольких инструкций, каждая из которых занимает ограниченную память [c] и требует времени для чтения. Рассмотрим простую задачу сложения двух чисел, 5 + 4. В этом случае программа должна будет загрузить значение 5 в аккумулятор с помощью инструкции, использовать инструкцию, указывающую на адрес для 4, и, наконец, сохранить результат. , 9, обратно в другую ячейку памяти. [4]LOAD addressADD addressSAVE address

Одна инструкция, несколько операндов [ править ]

Дальнейшие улучшения можно найти, указав адрес обоих операндов в одной инструкции, например . Такие ISA в "двухадресном формате" очень распространены. Можно дополнительно расширить эту концепцию до «трехадресного формата», где также сворачивается в расширенный . [4]ADD address 1, address 2SAVEADD address 1, address 2, address of result

Часто бывает, что базовое компьютерное слово намного больше, чем необходимо для хранения только инструкции и адреса, и в большинстве систем есть оставшиеся биты, которые можно использовать для хранения константы вместо адреса. Команды можно улучшить, если они позволяют заменять любой из операндов константой. Например, устраняет один цикл памяти и другой. [4]ADD address 1, constant 1ADD constant 1, constant 2

Множественные данные [ править ]

Дальнейшая сложность возникает при рассмотрении общих шаблонов доступа к памяти. Один очень распространенный паттерн состоит в том, что одна операция может применяться к большому количеству похожих данных. Например, можно сложить 1000 чисел. В простом двухадресном формате инструкций [d] нет возможности изменить адрес, поэтому 1000 добавлений должны быть написаны на машинном языке . ISA решают эту проблему с помощью концепции косвенной адресации., в котором адрес следующей точки данных не является константой, а хранится в памяти. Это означает, что программист может изменить адрес, выполняя сложение в этой ячейке памяти. ISA также часто включают возможность смещения адреса от начального местоположения путем добавления значения, хранящегося в одном из его регистров, в некоторых случаях в специальном индексном регистре . Другие выполняют это добавление автоматически, как часть инструкций по его использованию. [4]

Разнообразие режимов адресации приводит к изобилию немного разных инструкций. Учитывая одноадресный ISA, даже для одной инструкции ADD, у нас теперь есть много возможных "режимов адресации":

  • Немедленно (константа): - добавляет постоянное значение к результату в аккумуляторе.ADD.C constant 1
  • Прямой адрес: - добавить значение, хранящееся по адресу 1ADD.A address 1
  • Косвенная память: - прочтите значение в адресе 1, используйте это значение в качестве другого адреса и добавьте это значение.ADD.M address 1

Многие ISA также имеют регистры, которые можно использовать как для решения, так и для математических задач. Его можно использовать в одноадресном формате, если используется один адресный регистр. В этом случае становится доступен ряд новых режимов:

  • Прямой регистр: - добавить значение, хранящееся в адресе, хранящемся в первом регистре.ADD.R register 1
  • Смещение: - добавьте константу в адресный регистр, затем добавьте значение, найденное в памяти в этом результирующем месте.ADD.D constant 1
  • Индекс: - добавить значение регистра 1 в регистр адреса, чтобы создать новый адрес, а затем добавить значение в этом месте в аккумулятор.ADD.I register 1
  • Автоиндекс: - как в случае индекса, но автоматически увеличивает адресADD.AI register 1

Ортогональность [ править ]

Ортогональность - это принцип, согласно которому каждая инструкция должна иметь возможность использовать любой поддерживаемый режим адресации. В этом примере, если ADDдоступна версия с прямой адресацией , все остальные тоже должны быть. Причина такого дизайна не эстетическая, а цель - уменьшить общий размер объектного кода программы . Предоставляя различные режимы адресации, ISA позволяет программисту выбрать тот, который точно соответствует потребностям его программы в этой точке, и тем самым снижает необходимость использования нескольких инструкций для достижения одной и той же цели. Это означает, что общее количество инструкций сокращается, что позволяет сэкономить память и повысить производительность. Ортогональность часто описывалась как «очень эффективная». [5]

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

В приведенном выше примере ISA ADD.Cинструкция, использующая прямое кодирование, уже имеет данные, необходимые для выполнения инструкции, и никакой дальнейшей обработки не требуется, декодер просто отправляет значение в арифметико-логический блок (ALU). Однако, если используется ADD.Aинструкция, необходимо прочитать адрес, прочитать значение в этой ячейке памяти, и затем ALU может продолжить. Эта серия событий займет гораздо больше времени и требует дополнительных внутренних шагов. [5]

В результате время, необходимое для выполнения различных вариантов инструкции, может сильно различаться, что усложняет общую конструкцию ЦП. Следовательно, ортогональность представляет собой компромисс в дизайне; разработчик компьютеров может предложить программисту больше режимов адресации, чтобы повысить плотность кода за счет усложнения самого процессора. [5]

Когда память была маленькой и дорогой, особенно в эпоху барабанной или основной памяти , ортогональность была крайне желательна. Однако сложность зачастую превышала то, что можно было бы достичь с помощью современных технологий. По этой причине большинство машин 1960-х годов предлагали только частичную ортогональность, насколько это было возможно для конструкторов. Это было в 1970-х годах, когда внедрение крупномасштабной интеграции значительно снизило сложность компьютерных проектов, и начали появляться полностью ортогональные конструкции. К 1980-м годам такие конструкции можно было реализовать на однокристальном процессоре. [5]

В конце 1970-х, когда появились первые мощные полностью ортогональные конструкции, цель расширилась и стала компьютерной архитектурой на языке высокого уровня , или сокращенно HLLCA. Подобно тому, как ортогональность была желательна для улучшения битовой плотности машинного языка, целью HLLCA было улучшение битовой плотности языков высокого уровня, таких как ALGOL 68 . Эти языки обычно использовали запись активации , тип сложного стека, в котором хранятся временные значения, которые ISA обычно не поддерживают напрямую и должны быть реализованы с использованием множества отдельных инструкций из базового ISA. Добавление поддержки этих структур позволит более непосредственно транслировать программу в ISA. [5]

Ортогональность на практике [ править ]

PDP-11 [ править ]

PDP-11 был по существу ортогональным (в первую очередь за исключением инструкций с плавающей запятой). [6] Большинство целочисленных инструкций могут работать как с 1-байтовыми, так и с 2-байтовыми значениями и могут обращаться к данным, хранящимся в регистрах, сохраненным как часть инструкции, хранящимся в памяти или хранящимся в памяти и указанным адресами в регистрах. Даже ПК и указатель стека могут быть затронуты обычными инструкциями, использующими все обычные режимы данных. «Немедленный» режим (жестко запрограммированные числа в инструкции, такие как ADD # 4, R1 (R1 = R1 + 4), был реализован как режим «косвенный регистр, автоинкремент» и указание программного счетчика (R7) в качестве регистра для использования ссылки для косвенного и автоинкремента. [7]

PDP-11 использовал 3-битные поля для режимов адресации (0-7) и регистров (R0 – R5, SP, PC), поэтому было (электронно) 8 режимов адресации. Операнды немедленного и абсолютного адреса, применяющие два режима автоинкремента к программному счетчику (R7), обеспечивают в общей сложности 10 концептуальных режимов адресации. [7]

VAX-11 [ править ]

VAX-11 продлен на PDP-11 по ортогональности для всех типов данных, включая числа с плавающей точкой. [5] Инструкции, такие как «ADD», были разделены на варианты, зависящие от размера данных, такие как ADDB, ADDW, ADDL, ADDP, ADDF для добавления байта, слова, длинного слова, упакованного BCD и с плавающей запятой одинарной точности соответственно. Как и PDP-11, указатель стека и счетчик программ находились в общем регистровом файле (R14 и R15). [8]

Общая форма инструкции VAX-11 будет следующей:

код операции [ операнд ] [ операнд ] ...

Каждый компонент представляет собой один байт , код операции имеет значение в диапазоне 0–255, а каждый операнд состоит из двух полубайтов , верхние 4 бита определяют режим адресации, а нижние 4 бита (обычно) определяют номер регистра (R0 – R15 ). [8]

В отличие от 3-битных полей PDP-11, 4-битные суббайты VAX-11 привели к 16 режимам логической адресации (0–15). Однако режимы адресации 0–3 были «короткими и немедленными» для непосредственных данных размером 6 или менее бит (2 младших бита режима адресации были 2 старшими битами непосредственных данных, когда они добавлялись к оставшимся 4 битам. в этом байте адресации данных). Поскольку режимы адресации 0–3 были идентичны, получилось 13 (электронных) режимов адресации, но, как и в PDP-11, использование указателя стека (R14) и программного счетчика (R15) позволило создать в общей сложности более 15 концептуальных режимов адресации. (программа на ассемблере переводит исходный код в реальный режим адресации на основе указателя стека или программного счетчика). [8]

MC68000 и аналогичные [ править ]

Разработчики Motorola попытались сделать ассемблер ортогональным, в то время как основной машинный язык был несколько менее ортогональным. В отличие от PDP-11, MC68000 (68k) использовал отдельные регистры для хранения данных и адресов данных в памяти. ISA был ортогонален до такой степени, что адреса можно было использовать только в этих регистрах, но не было ограничений на то, какой из регистров может использоваться разными инструкциями. Точно так же регистры данных также были ортогональны по всем инструкциям. [9]

Напротив, серия NS320xx была первоначально разработана как однокристальная реализация VAX-11 ISA. Хотя это пришлось изменить из-за юридических проблем, полученная система сохранила большую часть общей философии дизайна VAX-11 и осталась полностью ортогональной. [10] Это включало устранение отдельных регистров данных и адресов, обнаруженных в 68k. [11]

8080 и последующие разработки [ править ]

8-битный микропроцессор Intel 8080 (а также 8085 и 8051) представлял собой слегка расширенную конструкцию на основе аккумулятора и, следовательно, не ортогонален. Программист на ассемблере или составитель компилятора должен был помнить о том, какие операции были возможны с каждым регистром: большинство 8-битных операций могло выполняться только с 8-битным аккумулятором (A-регистром), в то время как 16-битные операции могли выполняться. выполняется только для 16-битного указателя / накопителя (пара HL-регистров), тогда как простые операции, такие как приращение, были возможны для всех семи 8-битных регистров. Во многом это было связано с желанием сохранить длину всех кодов операций в один байт.

В двоично-совместимой Z80 позже добавили префикс-коду , чтобы избежать от этого предела 1 байт и позволяет более мощный набор инструкций. Та же основная идея была использована для Intel 8086 , хотя для обеспечения более радикальных расширений двоичная совместимость с 8080 здесь не предпринималась. В то время он сохранял некоторую степень неортогональности ради высокой плотности кода. 32-битное расширение этой архитектуры, представленное с 80386 , было несколько более ортогональным, несмотря на сохранение всех инструкций 8086 и их расширенных аналогов. Однако стратегия кодированияИспользуемый по-прежнему показывает много следов от 8008 и 8080 (и Z80). Например, однобайтовые кодировки сохраняются для некоторых частых операций, таких как отправка и извлечение регистров и констант; а первичный аккумулятор, регистр EAX , использует более короткие кодировки, чем другие регистры, для определенных типов операций. Подобные наблюдения иногда используются для оптимизации кода как в компиляторах, так и в коде, написанном вручную.

RISC [ править ]

Ряд исследований 1970-х годов продемонстрировали, что гибкость, обеспечиваемая ортогональными модами, редко или никогда не использовалась в реальных задачах. В частности, сотрудники IBM изучали следы кода, работающего в System / 370, и продемонстрировали, что только часть доступных режимов используется в реальных программах. Подобные исследования, часто посвященные VAX, продемонстрировали ту же картину. В некоторых случаях было показано, что сложность инструкций означала, что они занимали больше времени для выполнения, чем последовательность более мелких инструкций, с каноническим примером этого является INDEXинструкция VAX . [12]

В тот же период полупроводниковые запоминающие устройства быстро увеличивались в размерах и дешевели. Однако их скорость не улучшалась с той же скоростью. Это означало, что время, необходимое для доступа к данным из памяти, росло в относительном выражении по сравнению со скоростью процессоров. Это приводило к включению большего количества регистров, что давало ЦП больше временных значений для работы. Большее количество регистров означало, что для кодирования номера регистра потребуется больше битов в машинном слове, что предполагает уменьшение количества самих инструкций, чтобы освободить место.

Наконец, статья Эндрю Таненбаума продемонстрировала, что 97% всех констант в программе находятся в диапазоне от 0 до 10, причем 0 составляет от 20 до 30% от общего числа. Кроме того, от 30 до 40% всех значений в программе являются константами, с простыми переменными (в отличие от массивов и т.п.) еще от 35 до 40%. [13] Если процессор использует большее командное слово, например 32-битное, две константы и номер регистра могут быть закодированы в одной команде, если сама инструкция не использует слишком много битов.

Эти наблюдения привели к отказу от ортогонального дизайна как основной цели проектирования процессора и к возникновению философии RISC в 1980-х годах. Процессоры RISC обычно имеют только два режима адресации: прямую (постоянную) и регистровую. Все другие режимы, присутствующие в старых процессорах, обрабатываются явно с помощью инструкций загрузки и сохранения, перемещающих данные в регистры и из них. Может быть доступно только несколько режимов адресации , и эти режимы могут различаться в зависимости от того, относится ли инструкция к данным или включает в себя передачу управления .

Заметки [ править ]

  1. ^ См. Оцифровку .
  2. ^ адрес - это простые шестнадцатеричные числа, которые можно рассматривать как данные
  3. ^ Даже в современных компьютерах производительность увеличивается за счет хранения данных в кэше, ограниченном ресурсе.
  4. ^ при условии, что с адресом нельзя работать

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

  1. ^ Ноль, Линда; Лобур, Юлия (2010). Основы компьютерной организации и архитектуры . Издательство "Джонс и Бартлетт". С. 287–288. ISBN 978-1449600068.
  2. ^ Тарик, Джамиль (1995), «RISC против CISC: почему меньше значит больше» , IEEE Potentials (август / сентябрь) , получено 7 мая 2019 г.
  3. ^ "Основы компьютерной организации и дизайна" (PDF) . Лаборатория вычислительных сенсомоторных систем.
  4. ^ a b c d e Таллсен, декан. "Архитектура набора команд" (PDF) . UCSD.
  5. ^ a b c d e f g Хеннесси, Джон; Паттерсон, Дэвид (29 мая 2002 г.). Компьютерная архитектура: количественный подход . п. 151. ISBN. 9780080502526.
  6. ^ «Введение в PDP-11» . Сиднейский университет .
  7. ^ a b «Справочник по инструкции PDP-11» (PDF) . Университет Торонто .
  8. ^ a b c «Другой подход к архитектуре набора команд - VAX» (PDF) . Бременский университет .
  9. ^ Веронис, Эндрю (2012-12-06). Микропроцессор 68000 . п. 54. ISBN 9781468466478.
  10. ^ Тилсон, Майкл (октябрь 1983). «Перенос Unix на новые машины» . БАЙТ . п. 266 . Проверено 31 января 2015 года .
  11. ^ "NS32532" . Datormuseum .
  12. ^ Паттерсон, DA ; Дицель, Д.Р. (1980). «Кейс для компьютера с сокращенным набором команд». Новости компьютерной архитектуры ACM SIGARCH . 8 (6): 25–33. CiteSeerX 10.1.1.68.9623 . DOI : 10.1145 / 641914.641917 . S2CID 12034303 .  
  13. ^ Таненбаум, Эндрю (1978). «Последствия структурного программирования для машинной архитектуры» . Коммуникации ACM . 21 (3): 237–246. DOI : 10.1145 / 359361.359454 . ЛВП : 1871/2610 . S2CID 3261560 .