Boroda_2
.docНаше описание микросхемы UltraSPARC III не отличается полнотой, но его вполне достаточно, чтобы вы получили некоторое представление о принципах ее работы и отличиях от архитектуры Pentium 4.
Микроархитектура процессора 8051
Микроархитектура процессора 8051 (рис. 4.35) значительно проще двух предыдущих — Pentium и UltraSPARC. Дело в том, что размер этой микросхемы очень мал (она состоит из 60 ООО транзисторов), а разрабатывалась она задолго до того, как конвейерная технология стала популярной. Кроме того, перед разработчиками 8051 ставилась задача создать дешевую, а не быструю микросхему. Как известно, «дешевый» и «простой» — очень близкие понятия, в то время как дешевизна и быстродействие в нашем контексте редко сочетаются.
Центральное положение в микроархитектуре 8051 занимает основная шина. С ней связаны немногочисленные регистры, причем для большинства из них операции чтения и записи выполняются программно. Регистр АСС представляет собой основной арифметический регистр, в котором сохраняется большая часть результатов вычислений. Через него проходят почти все арифметические команды. Регистр В применяется для умножения и деления; кроме того, при хранении результатов он выполняет роль временного регистра. Регистр SP является указателем стека, как и в большинстве других систем он указывает на вершину стека. В регистре команд IR содержатся команды, выполняемые в данный момент.
Регистры ТМР1 и ТМР2 — это защелки, обслуживающие АЛУ. Перед выполнением операций в АЛУ соответствующие операнды копируются в эти защелки. Результаты вычислений в АЛУ записываются в любой регистр записи, доступ к которому обеспечивает основная шина. Коды состояний, обозначающие нулевые, отрицательные и тому подобные результаты, записываются в регистр PSW (Program Status Word — слово состояния программы).
В 8051 предусмотрены независимые модули памяти для размещения данных и кода. Емкость ОЗУ для размещения данных составляет 128 (модель 8051) или 256 (модель 8052) байт; соответственно, 8-разрядного регистра RAM ADDR вполне достаточно для полной адресации этой памяти. В процессе адресации ОЗУ адрес целевого байта размещается в регистре RAM ADDR, после чего производится обращение к памяти. Емкость памяти кода может достигать 64 Кбайт (при условии размещения модуля памяти вне микросхемы), поэтому разрядность регистра ROM ADDR составляет 16 бит. Схема адресации к программному коду в ПЗУ с помощью регистра ROM ADDR аналогична вышеописанной схеме для памяти данных.
Регистр DPTR (Double PoinTeR — двойной указатель) — это 16-разрядный временный регистр, предназначенный для управления и сборки 16-разрядных адресов. Регистр PC представляет собой 16-разрядный счетчик команд; иными словами, он определяет адрес следующей команды, которую требуется вызвать и выполнить. Регистр PC incrementer — это специальный аппаратный модуль, выполняющий роль псевдорегистра. Когда в него копируется, а затем считывается содержимое регистра PC, его значение автоматически увеличивается на единицу. Ни к PC, ни к PC incrementer нельзя обратиться через основную шину. Наконец, BUFFER — это еще один 16-разрядный временный регистр. На самом деле каждый 16-разрядный регистр процессора 8051 состоит из пары 8-разрядных регистров, с каждым из которых можно выполнять разные операции.
В дополнение ко всему, на микросхеме 8051 устанавливаются три 16-разрядных таймера, необходимых для выполнения приложений в реальном времени. Также предусмотрено четыре 8-разрядных порта ввода-вывода, через которые процессор 8051 может управлять 32 внешними кнопками, световыми индикаторами, датчиками, выключателями и т. д. Именно наличие таймеров и портов ввода-вывода делает возможным применение 8051 в качестве встроенного процессора без установки дополнительных микросхем.
Процессор 8051 относится к категории синхронных — большинство команд, которые он обрабатывает, завершаются за один цикл. Каждый цикл делится на шесть частей, называемых состояниями. В первом состоянии следующая команда вызывается из ПЗУ, и по основной шине отправляется в регистр IR. Во втором состоянии проводится декодирование этой команды, а значение в регистре PC увеличивается на единицу. В третьем состоянии подготавливаются операнды; в четвертом один из них передается основной шине, после чего, как правило, размещается в регистре ТМР1 и выполняет роль операнда АЛУ. В этом же состоянии возможно копирование содержимого АСС в регистр ТМР2, после чего оба АЛУ становятся готовы к дальнейшей обработке. В пятом состоянии происходит выполнение команд АЛУ. Наконец, в шестом состоянии результаты выполнения команд АЛУ передаются обратно основной шине. Одновременно в регистре ROM ADDR проводится подготовка к вызову следующей команды.
Об устройстве 8051 можно было бы рассказать подробнее, однако имеющегося описания и схемы, изображенной на рис. 4.35, вполне достаточно для того, чтобы получить общее представление. Резюмируя вышеизложенное, отметим, что 8051 состоит из одной основной шины (что позволяет уменьшить размер микросхемы), гетерогенного набора регистров, трех таймеров и четырех портов, подключенных к основной шине, а также нескольких дополнительных регистров, соединенных с локальной шиной. В течение каждого цикла тракта данных два АЛУ получают на входе по одному операнду, после чего, как и в более современных системах, результаты сохраняются в регистре.
Сравнение процессоров Pentium, UltraSPARC и 8051
Приведенные три процессора во многом отличаются друг от друга, однако у них есть удивительная общность, которая может помочь в разработке компьютера. Pentium 4 поддерживает унаследованный набор CISC-команд, который инженеры компании Intel рады бы слить в ближайший водоем, но этим бы они безусловно нарушили природоохранное законодательство. UltraSPARC III — классическая RISC-система с эффективным набором команд. 8051 — простой 8-разрядный процессор, применяемый в качестве встроенного компьютера. В основе всех представленных примеров — набор регистров и один или несколько АЛУ, выполняющих простые арифметические и булевы операции с операндами из регистров.
Несмотря на различия, все три машины имеют сходные функциональные блоки. Все функциональные блоки получают микрооперации, в которых содержится код операции, а также указаны два входных и один выходной регистр. Все они могут выполнять микрооперацию за один цикл. Все они конвейеризированы и поддерживают прогнозирование ветвлений. Наконец, все содержат разделенную кэш-память для команд и для данных.
Такое внутреннее сходство не случайно, причиной его являются вовсе не постоянные переходы инженеров из одной компании Кремниевой долины в другую. Когда мы рассматривали микроархитектуры Mic-З и Mic-4, мы видели, что достаточно просто построить конвейеризированный тракт данных с двумя регистрами в качестве источников, в котором значения этих регистров проходят через АЛУ, а результат сохраняется в регистре. На рис. 4.22 представлено графическое изображение такого конвейера. Для современной технологии это наиболее эффективная система.
Главное различие между Pentium 4 и UltraSPARC III состоит в том, как передаются ISA-команды функциональному блоку. Компьютеру Pentium 4 приходится разбивать CISC-команды, чтобы преобразовать их в 3-регистровый формат, необходимый для функционального блока. Именно этот процесс показан на рис. 4.32 — разбиение больших команд на маленькие микрооперации. Машине UltraSPARC III не нужно ничего делать, поскольку ее исходные команды уже представляют собой удобные и компактные микрооперации. Вот почему большинство новых архитектур ISA относятся к типу RISC, который обеспечивает оптимальное сочетание набора команд и внутреннего механизма их выполнения.
Полезно сравнить нашу последнюю разработку, микроархитектуру Mic-4, с этими тремя реальными машинами. Mic-4 больше всего напоминает Pentium 4. Обе системы интерпретируют команды, не являющиеся RISC-командами. Для этого обе системы разбивают команды на микрооперации, в которых указаны код операции, два входных и один выходном регистр. В обоих случаях микрооперации помещаются в очередь для дальнейшего выполнения. В Mic-4 микрооперации запускаются строго по порядку, выполняются строго по порядку и завершаются тоже строго по порядку. В Pentium 4 микрооперации запускаются по порядку, выполняются в произвольном порядке, а завершаются опять-таки по порядку.
Сравнивать Mic-4 и UltraSPARC III некорректно, поскольку команды системы UltraSPARC III — это RISC-команды (то есть 3-регистровые микрооперации). Их не нужно ни разбивать, ни объединять. Их можно выполнять в том виде, в котором они есть, каждую за один цикл тракта данных.
По сравнению с Pentium 4 и UltraSPARC III, микросхема 8051 очень проста. Ее микроархитектура больше напоминает RISC, чем CISC, поскольку простые команды выполняются в ней за один цикл без разбивки на составные части. Ни конвейеризация, ни кэширование в 8051 не предусмотрены. Команды запускаются, выполняются и возвращают результаты по порядку. По своей простоте процессор 8051 напоминает Mic-1.
Краткое содержание главы
Основным компонентом любого компьютера является тракт данных. Он содержит несколько регистров, одну, две или три шины, а также один или несколько функциональных блоков, например АЛУ и схему сдвига. В основном цикле вызываются несколько операндов из регистров и передаются по шинам к АЛУ и другому функциональному блоку на выполнение. После завершения операции результаты вновь сохраняются в регистрах.
Тракт данных может управляться контроллером последовательности, который вызывает микрокоманды из управляющей памяти. Каждая микрокоманда содержит биты, управляющие трактом данных в течение одного цикла. Эти биты определяют, какие операнды нужно выбрать, какую операцию выполнить и что делать с результатами. Кроме того, каждая микрокоманда указывает на следующую микрокоманду (обычно в ней содержится ее адрес). Некоторые микрокоманды изменяют этот базовый адрес с помощью операции ИЛИ.
IJVM — это машина со стековой организацией и с однобайтными кодами операций, которые помещают слова в стек, выталкивают слова из стека и выполняют различные операции над словами из стека (например, складывают их). В данной главе описывается микропрограмма для микроархитектуры Mic-1. Если добавить блок выборки команд для загрузки команд из потока байтов, то можно устранить большое количество обращений к счетчику команд, и тогда скорость работы машины значительно возрастет.
Существует множество подходов к организации уровня микроархитектуры, в том числе 2- или 3-шинная структура, кодированные или декодированные поля микрокоманд, наличие или отсутствие вызова с упреждением, конвейер с большим или небольшим количеством ступеней, и т. д. Mic-1 — это простая машина с программным управлением, последовательным выполнением команд и полным отсутствием параллелизма. Mic-4, напротив, является микроархитектурой с высокой степенью параллелизма и 7-ступенчатым конвейером.
Производительность компьютера можно повысить несколькими способами, основным из которых является использование кэш-памяти. Кэш-память прямого отображения и ассоциативная кэш-память с множественным доступом позволяют ускорить обращения к памяти. Помимо использования кэш-памяти, применяют прогнозирование ветвлений (как статическое, так и динамическое), выполнение с изменением последовательности операций и спекулятивное выполнение команд.
Наши три процессора, Pentium 4, UltraSPARC III и 8051, рассматриваемые в качестве примеров, похожи в том плане, что их микроархитектуры неочевидны для программистов, пишущих на языке ассемблера архитектурного уровня. Pentium 4 реализует сложную схему преобразования ISA-команд в микрооперации, их кэширования, передачи суперскалярному RISC-ядру для выполнения вне исходной последовательности, подмены регистров и применения всех остальных описанных в этой книге трюков, позволяющих разогнать оборудование до максимально возможной скорости. Что же касается процессора UltraSPARC III Си, то, если не считать многоступенчатого конвейера, его микроархитектура достаточно проста: запуск и выполнение команд, а также получение их результатов осуществляются без изменения последовательности команд. Процессор 8051 прост до крайности — к одной основной шине подключено несколько регистров и одно АЛУ.
Вопросы и задания
-
На рис. 4.5 регистр шины В кодируется через 4-разрядное поле, а шина С представлена в виде битового отображения. Почему?
-
На рис. 4.5 есть блок «Старший бит». Нарисуйте его схему.
-
Когда в микрокоманде установлено поле JMPC, регистр MBR соединяется операцией ИЛИ с полем NEXT_ADDRESS, чтобы получить адрес следующей микрокоманды. Существуют ли такие обстоятельства, при которых имеет смысл использовать поле JMPC, если в NEXT_ADDRESS находится значение 0x1FF?
-
Предположим, что в листинге 4.1 после оператора if имеется следующий оператор:
к = 5;
Каким будет новый ассемблерный код при условии, что компилятор является оптимизирующим?
-
Напишите два разных варианта трансляции для IJVM следующего оператора на языке Java:
i = k + л + 5;
-
Напишите на языке Java оператор, ставший источником следующего кода для IJVM:
ILOAD j ILOAD k ISUB
BIPUSH 6 ISUB DUP I ADD ISTORE i
-
В этой главе мы упомянули, что при трансляции показанного ниже оператора в двоичную форму метка L2 должна находиться среди младших 256 слов управляющей памяти:
if (Z) goto LI; else goto L2
А может ли метка LI находиться, скажем, в ячейке с адресом 0x40, a L2 — в ячейке с адресом 0x140? Объясните, почему.
-
В микрокоманде if_cmpeq3 микропрограммы для Mic-1 значение регистра MDR копируется в регистр Н, а в следующей строке от него отнимается значение регистра TOS. Казалось бы, это удобнее записать в одном операторе:
i f_cmpeq3 Z=MDR-T0S: rd Почему этого не делают?
-
Сколько времени потребуется машине Mic-1, которая работает на частоте 2,5 ГГц, на выполнение следующего Java-onepaTopa:
i = j + k;
Ответ дайте в наносекундах.
10. Аналогичный вопрос только уже для машины Mic-2, тоже работающей на частоте 2,5 ГГц. Опираясь на полученный результат, ответьте, сколько времени займет выполнение программы на машине Mic-2, если эта программа выполняется на машине Mic-1 за 100 не?
И. Напишите микропрограмму для Mic-1, чтобы реализовать JVM-команду P0PTW0. Эта команда удаляет два верхних слова из стека.
-
На машине JVM существуют специальные однобайтные коды операций для загрузки в стек локальных переменных от 0 до 3, которые используются вместо обычной команды IL0AD. Какие изменения нужно внести в машину IJVM, чтобы наилучшим образом использовать эти команды?
-
Команда ISHR (целочисленный арифметический сдвиг вправо) поддерживается в JVM, но не поддерживается в IJVM. Команда извлекает два верхних слова из стека и заменяет их одним словом (результатом). Второе сверху слово стека — это сдвигаемый операнд. Он сдвигается вправо на значение от 0 до 31 включительно, в зависимости от значения пяти самых младших битов верхнего слова в стеке (остальные 27 бит игнорируются). Знаковый бит дублируется вправо на столько же битов, на сколько осуществляется сдвиг. Код операции для команды ISHR равен 122 (0x7А).
-
Команда ISHL (целочисленный сдвиг влево) поддерживается в JVM, но не поддерживается в IJVM. Команда извлекает два верхних слова из стека и заменяет их одним значением (результатом). Второе сверху слово в стеке — сдвигаемый операнд. Он сдвигается влево на значение от 0 до 31 включительно, в зависимости от значения пяти младших битов верхнего слова в стеке (остальные 2 бит верхнего слова игнорируются). Нули сдвигаются влево на столько же битов, на сколько осуществляется сдвиг. Код операции ISHL равен 120 (0x78).
-
JVM-команде INVOKEVIRTUAL нужно знать, сколько у нее параметров. Зачем?
-
Реализуйте JVM-команду DL0AD для Mic-2. Эта команда содержит однобайтный индекс и помещает локальную переменную, находящуюся в этом месте, в стек. Затем она помещает следующее старшее слово в стек.
-
Нарисуйте конечный автомат для учета очков при игре в теннис. Правила игры в теннис следующие. Чтобы выиграть, вам нужно получить как минимум 4 очка и у вас должно быть как минимум на 2 очка больше, чем у вашего соперника. Начните с состояния (0, 0), то есть с того, что ни у кого из вас еще нет очков. Затем добавьте состояние (1,0), означающее, что игрок А получил очко. Ребро от состояния (0, 0) к состоянию (1,0) обозначьте буквой А. Затем добавьте состояние (0, 1), чтобы показать, что игрок В получил очко, а ребро к состоянию (0, 1) обозначьте буквой В. Продолжайте добавлять состояния и ребра до тех пор, пока не нарисуете все возможные состояния.
-
Вернитесь к предыдущему вопросу. Существуют ли такие состояния, которые можно безболезненно удалить, никак не повлияв на результат любой игры? Если да, то какие из них эквивалентны?
-
Нарисуйте конечный автомат для прогнозирования ветвлений, более надежный, чем тот, который изображен на рис. 4.29. Он должен изменять прогноз только после трех последовательных неудачных прогнозов.
-
Сдвиговый регистр, изображенный на рис. 4.18, имеет максимальную емкость 6 байт. Можно ли сконструировать блок выборки команд с 5-байтным сдвиговым регистром? А с 4-байтным?
-
Предыдущий вопрос связан с удешевлением блока выборки команд. Теперь рассмотрим вопрос его удорожания. Может ли когда-нибудь понадобиться сдвиговый регистр большей емкости, скажем, на 12 байт? Если да, то почему? Если нет, то почему?
-
В микропрограмме для микроархитектуры Mic-2 микрокоманда if_icmpeq6 выполняет переход к Т, если бит Z установлен в 1. Однако микрокоманда Т та же, что и для gotol. А можно ли перейти к gotol сразу, и станет ли машина работать быстрее после этого?
-
В микроархитектуре Mic-4 блок декодирования отображает IJVM-код операции в индекс ПЗУ, где хранятся соответствующие микрооперации. Кажется, что было бы проще опустить ступень декодирования и сразу передать IJVM-код операции в очередь. Тогда можно использовать IJVM-код операции в качестве индекса в ПЗУ микроопераций, точно так же, как в микроархитектуре Mic-1. Что не так в этом плане?
-
Компьютер содержит двухуровневую кэш-память. Предположим, что 60 % обращений к памяти — это кэш-попадания в кэш-память первого уровня, 35 % — в кэш-память второго уровня, а 5 % — это кэш-промахи. Время доступа составляет 5, 15 и 60 не соответственно, причем время доступа в кэш-память второго уровня и в основную память отсчитывается с того момента, как становится известно, что соответствующая память нужна (например, доступ к кэш-памяти второго уровня не может начаться, пока не произойдет кэш-промах при поиске в кэш-памяти первого уровня). Каково среднее время доступа?
-
В конце подраздела «Кэш-память» в разделе «Повышение производительности» было отмечено, что заполнение по записи выгодно только в том случае, если имеют место повторные записи в одну и ту же строку кэша. А если после записи следуют многочисленные считывания из одной и той же строки? Будет ли полезным заполнение по записи в этом случае?
-
В черновом варианте этой книги на рис. 4.27 вместо 4-входовой ассоциативной кэш-памяти была изображена 3-входовая ассоциативная кэш-память. Один из рецензентов заявил, что читателей это может смутить, поскольку 3 — это не степень двойки, а компьютеры все делают в двоичной системе. Поскольку потребитель всегда прав, рисунок изменили на 4-входовую ассоциативную кэш-память. Был ли рецензент прав? Аргументируйте.
-
Компьютер с пятиступенчатым конвейером после обработки условного перехода простаивает следующие три цикла. Насколько этот простой снизит производительность, если 20 % команд являются командами условного перехода? Другие причины простоя не учитывайте.
-
Предположим, что компьютер вызывает до 20 команд заранее. В среднем 4 из этих них являются командами условного перехода, причем вероятность правильного прогноза каждого составляет 90 %. Какова вероятность, что предварительно вызванная команда находится на одном из правильных путей?
-
Предположим, что нам пришлось изменить структуру машины, представленную с помощью табл. 4.11, чтобы использовать 16 регистров вместо 8. Тогда мы изменим команду 6, чтобы регистр R8 стал целевым. Что в этом случае будет происходить в циклах, начиная с цикла 6?
-
Обычно взаимозависимости затрудняют работу конвейеризированных процессоров. Можно ли что-нибудь сделать с WAW-взаимозависимостыо, чтобы улучшить положение вещей? Какие существуют средства оптимизации?
-
Перепишите интерпретатор Mic-1 таким образом, чтобы регистр LV указывал на первую локальную переменную, а не на связующий указатель.
-
Напишите моделирующую программу для одновходовой кэш-памяти прямого отображения. Сделайте число элементов и длину строки параметрами программы. Поэкспериментируйте с этой программой и представьте полученные результаты.
Глава 5
Уровень архитектуры набора команд
В этой главе подробно обсуждается уровень архитектуры набора команд (ISA). Как показано на рис. 1.2, он расположен между уровнями микроархитектуры и операционной системы. Исторически этот уровень развился прежде всех остальных уровней и изначально был единственным. В наши дни этот уровень очень часто называют «архитектурой» машины, а иногда (что неправильно) — «языком ассемблера».
Уровень архитектуры набора команд имеет особое значение: он является связующим звеном между программным и аппаратным обеспечением. Конечно, можно было бы сделать так, чтобы аппаратное обеспечение непосредственно выполняло программы, написанные на С, C++, Java или других языках высокого уровня, но это не очень хорошая идея. Преимущество компиляции перед интерпретацией было бы тогда потеряно. Кроме того, из чисто практических соображений компьютеры должны уметь выполнять программы, написанные на разных языках, а не только на одном.
В сущности, все разработчики считают, что нужно транслировать программы, написанные на различных языках высокого уровня, в некую общую для всех промежуточную форму — уровень архитектуры набора команд — и, соответственно, строить аппаратное обеспечение, которое сможет непосредственно выполнять программы этого уровня. Уровень архитектуры набора команд связывает компиляторы и аппаратное обеспечение. Это язык, который понятен и компиляторам, и устройствам. На рис. 5.1 показана взаимосвязь компиляторов, уровня архитектуры набора команд и аппаратного обеспечения.
В идеале при создании новой машины разработчики архитектуры команд должны консультироваться с разработчиками и компиляторов, и аппаратуры, чтобы выяснить, какими особенностями должен обладать подведомственный им уровень. Если разработчики компилятора потребуют какого-то свойства, которое инженеры не смогут реализовать, то такая идея не пройдет. Точно так же, если разработчики аппаратного обеспечения захотят ввести в компьютер какой-либо новый элемент, но программисты не смогут написать поддерживающую его программу, такой проект никогда не воплотится. Реализуемый в конечном итоге уровень архитектуры набора команд, оптимизированный для нужных языков программирования, всегда является плодом долгих обсуждений и моделирования.
Но все это в теории. А теперь перейдем к суровой реальности. Когда появляется новая машина, первый вопрос, который задают все потенциальные покупатели: «Совместима ли машина с предыдущими версиями?» Второй вопрос: «Можно ли запустить на ней прежнюю операционную систему?» И третий вопрос: «Будут ли работать на этой машине прежние приложения и не потребуется ли заменять их новыми версиями?» Если ответ на любой из этих вопросов оказывается отрицательным, разработчики должны объяснить, почему. Покупатели вряд ли захотят выбросить свои любимые программы, чтобы начать все заново.
Этот факт заставляет производителей компьютеров поддерживать один и тот же уровень команд в разных моделях или, по крайней мере, делать его обратно совместимым. Под обратной совместимостью мы понимаем способность новой машины выполнять старые программы без изменений. В то же время новая машина может поддерживать новые команды и иметь другие особенности, используемые новым программным обеспечением. Разработчики должны делать уровень команд совместимым с предыдущими моделями, но они вправе как угодно менять аппаратное обеспечение, поскольку едва ли кого-нибудь из покупателей волнует, что собой в реальности представляют «внутренности» компьютера и что именно делает то или иное устройство. Разработчики могут переходить от микропрограмм к непосредственному использованию устройств, добавлять конвейеры, реализовывать суперскалярные схемы и т. п., но при условии, что они сохранят обратную совместимость с уровнем команд предыдущих моделей. Основная цель — убедиться, что старые программы работают на новой машине. То есть на первый план выходит задача не просто создания хороших машин, а создания хороших машин при условии их обратной совместимости.
Все сказанное вовсе не принижает значимость уровня архитектуры набора команд. Качественный уровень архитектуры набора команд чрезвычайно важен, особенно в отношении вычислительных возможностей и стоимости. Производительность эквивалентных машин с разными уровнями архитектуры набора команд может различаться на 25 %. Мы просто хотим сказать, что рынок в определенной степени затрудняет переход от старой архитектуры команд к новой. Тем не менее иногда появляются новые уровни команд универсального назначения, а на специализированных рынках (например, на рынке встроенных систем или на рынке мультимедийных процессоров) они возникают гораздо чаще. Следовательно, важно понимать принципы работы этого уровня.
Какую архитектуру команд можно считать хорошей? Существуют два основных фактора. Во-первых, хорошая архитектура должна предлагать набор команд, которые можно эффективно реализовать не только в современной, но и в будущей технике. При плохо разработанной архитектуре команд процессор может строиться из большего числа вентилей, для выполнения программ может требоваться больший объем памяти и т. д. Проект, в котором должным образом учтены особенности конкретной техники, может стать основой для производства целого поколения компьютеров, прийти на смену которым сможет система с еще более совершенной архитектурой команд.
Во-вторых, хорошая архитектура команд должна обеспечивать предельную ясность в отношении того, какой именно должна быть откомпилированная программа. Регулярность и полнота вариантов — те черты, которые не всегда свойственны архитектуре команд. Эти черты особенно важны для компилятора, который не всегда может сделать оптимальный выбор из нескольких альтернатив, особенно если некоторые очевидные на первый взгляд альтернативы архитектурой команд не поддерживаются. Если говорить кратко, поскольку уровень архитектуры набора команд является промежуточным звеном между аппаратным и программным обеспечением, он должен быть приемлемым и для разработчиков аппаратного обеспечения (с точки зрения эффективной реализации), и для программистов (с точки зрения написания качественного кода).