Для устранения недостатка в Pentium реализованы раздельные кэш для команд и данных, позволяющие после переходов перезагружать лишь команды - такое решение называется Гарвардской архитектурой, а также предсказание переходов, снижающее частоту перезагрузок. Последнее достигается предварительной загрузкой в кэш команд с обоих разветвлений. Введение второго целочисленного тракта, состоящего из АЛУ, адресного блока, шин данных/команд, и работающего на общий блок регистров, повысило производительность поддержкой параллельной обработки целочисленных данных. Развитием данной тенденции стало обогащение Pentium MMX мультимедийным трактом, образованным АЛУ, шинами данных/команд и регистровым файлом.
При этом в случае выборки двух целочисленных команд, зависящих по данным, каждая из них выполняется последовательно, что снижает эффективность работы процессора.
тема 1 вопрос 22
RISC и CISC архитектуры
Здесь рассматриваются базовые свойства архитектур CISC и RISC, а также особенности интеграции
элементов RISCархитектуры в процессорах x86. Особое внимание уделяется описанию преимуществ и
недостатков этой интеграции. Показано естественность взаимообогащения CISC и RISCпроцессоров
эффективными аппаратнопрограммными решениями, а также практичность развития процессоров в
этом направлении.
Организация первых моделей процессоров i8086/8088 была направлена, в частности, на сокращение
объёма программ, критичного для систем того времени, отличавшихся малой оперативной памятью.
Расширение спектра операций, реализуемых системой команд, позволило уменьшить размер программ,
а также трудоёмкость их написания и отладки. Однако увеличение числа команд повысило
трудоёмкость разработки их топологических и микропрограммных реализаций.
Последнее проявилось в удлинении сроков разработки CISCпроцессоров, а также в проявлении
различных ошибок в их работе. Кроме того, нерегулярность потока команд ограничила развитие
топологии временным параллелизмом обработки инструкций на конвейере "выборка команды
дешифрация команды выборка данных вычисление запись результата".
Эти недостатки обусловили необходимость разработки альтернативной архитектуры, нацеленной,
прежде всего, на снижение нерегулярности потока команд уменьшением их общего количества. Это
было реализовано в RISCпроцессорах, название которых означает "чипы с сокращённой системой
команд" (Reduced Instruction Set Computer). Одновременно "классические" процессоры получили
обозначение CISC (Complex Instruction Set Computer) компьютер со сложным набором инструкций.
Сокращение нерегулярности потока команд позволило обогатить топологию RISCпроцессоров
пространственным параллелизмом, специализированными аппаратными АЛУ (ALU блок логики и
арифметики = Arithmetic (and) Logic Unit), независимыми кэш данных и команд, раздельными шинами
вводавывода. Последние, в частности, увеличили длину конвейеров команд. Всё это повысило и
производительность увеличением числа операций, выполняемых за один такт, и быстродействие
сокращением пути транзактов RISCпроцессоров. При этом срок разработки данных чипов
свидетельствует о том, что её трудоёмкость меньше, чем в случае CISCпроцессоров.
На мировых рынках CISCпроцессоры представлены, в основном, клонами процессоров Intel серии x86,
производимыми AMD, Cyrix, а RISC чипами Alpha, PowerPC, SPARC. Уступая во многом последним,
процессоры x86 сохранили лидерство на рынке персональных систем лишь благодаря совместимости с
программным обеспечением младших моделей, общая стоимость которого в начале 90х годов
составила несколько миллиардов долларов США. В свою очередь, достоинства RISCпроцессоров
укрепили их позиции на более молодом рынке высокопроизводительных машин.
Несмотря на формальное разделение "сфер влияния", между представителями этих архитектур в
начале 90х годов началась острая конкуренция за превентивное улучшение характеристик. В первую
очередь, производительности и её отношения к трудоёмкости разработки процессоров. Следуя
принципу "бить врага его оружием", создатели и CISC, и RISCпроцессоров нередко боролись с
конкурентами, заимствуя их удачные решения.
Первыми на то решились разработчики Intel, реализовавшие в i486 пространственный параллелизм
вычислений с фиксированной и плавающей запятой. Поддержка каждого АЛУ своей шиной
данных/команд и регистровым блоком повысила производительность i486 одновременным выполнением
указанных команд. Кроме того, интеграция кэш и очереди команд позволила поднять частоту ядра
процессора в 23 раза в сравнении с системной шиной. Однако совместное размещение данных и команд
ограничило эффективность кэш необходимостью его полной перезагрузки после выполнения команд
переходов.
Для устранения недостатка в Pentium реализованы раздельные кэш для команд и данных, позволяющие
после переходов перезагружать лишь команды такое решение называется Гарвардской архитектурой, а
также предсказание переходов, снижающее частоту перезагрузок. Последнее достигается
предварительной загрузкой в кэш команд с обоих разветвлений. Введение второго целочисленного
тракта, состоящего из АЛУ, адресного блока, шин данных/команд, и работающего на общий блок
регистров, повысило производительность поддержкой параллельной обработки целочисленных данных.Развитием данной тенденции стало обогащение Pentium MMX мультимедийным трактом, образованным
АЛУ, шинами данных/команд и регистровым файлом.
При этом в случае выборки двух целочисленных команд, зависящих по данным, каждая из них
выполняется последовательно, что снижает эффективность работы процессора. Частично поправило
ситуацию создание оптимизирующих рекомпиляторов, например, Pen_Opt фирмы Intel, разделяющих по
возможности такие команды.
Реализация описанного управления обработкой команд CISCформата вызвала дополнительный рост
трудоёмкости разработки Pentium в сравнении с i8086/i486, что привело не только к увеличению её
реального срока на 27% в сравнении с ожидаемым, но и к проявлению ошибок в первых моделях
данного процессора.
Учтя это, компания Intel реализовала в Pentium Pro RISCподобную организацию вычислений.
Интерпретация команд х86 внутренними RISC86 инструкциями VLIWформата помимо снижения
нерегулярности их потока, обеспечила синхронную загрузку четырёх операционных по два с
плавающей и фиксированной запятой АЛУ этого чипа. Термин VLIW расшифровывается как "очень
длинное командное слово" (Very Long Instruction Word). Инструкции этого формата содержат команды
для всех параллельных АЛУ.
Обогащение управления обработкой предвыборкой данных и команд, предполагаемых к обработке в
ближайшие 20 тактов, повысило регулярность загрузки вычислительных трактов. В свою очередь,
осуществление предвыборки из интегрированного на кристалле кэш второго уровня, обслуживаемого
раздельными шинами "интерфейскэш" и "кэшАЛУ" и работающего на частоте АЛУ, повысило
быстродействие подготовки команд в сравнении с внешними кэш. Дополнительное повышение
производительности Pentium Pro обеспечило увеличение длины команд до 11 ступеней введением
ступеней трансляции и предвыборки. Кроме того, интеграция кэш второго уровня позволила умножать
частоту ядра в 56 раз.
В архитектуре Р6 RISCрешения впервые в семействе х86 перестали быть лишь дополнением исконных
CISCсредств повышения производительности роста разрядности, отложенной записи шины и других.
Поэтому частица PRO в названии первого процессора этой серии обозначает "Полноценная RISC
архитектура" (Precision RISC Organization).
Топологические новинки Pentium II интеграция тракта MMX, мультипроцессорный интерфейс Xeon,
вынесение кэш второго уровня на кристалл в корпусе чипа, как и полное устранение кэш второго
уровня в Celeron, не имеют в данном случае качественной роли и направлены на оптимизацию
отношения характеристик этих процессоров, к их цене.
При этом сокращение нерегулярности потока RISC86инструкицй ограничило рост требований к
развитию управления вычислениями в сравнении с Pentium. Одновременно снижение трудоёмкости
разработки аппаратнопрограммных реализаций алгоритмов работы Pentium Pro, достигнутое развитием
САПР, ослабило влияние развития обработки данных, оцениваемого ростом объёма информации,
заложенной в реализациях этой обработки, на общую трудоёмкость разработки процессоров,
оцениваемую её длительностью.
Последнее создало возможность оптимизации соотношения характеристик чипов и их трудоёмкости не
снижением последней ограничением внедрения прогрессивных решений в CISCархитектуру или
ограничением функциональных возможностей RISCпроцессоров, а ростом характеристик,
достигаемым сочетанием преимуществ упомянутых архитектур.
Сказанное иллюстрирует и организация современных RISCпроцессоров. Их отличает, в данном случае,
развитие систем команд с целью сохранения иерархической совместимости и снижения трудоёмкости
разработки программ. Это сближает технологии обработки команд процессорами упомянутых
архитектур. Например, SuperSparc взяли от последних моделей х86 предсказание переходов и
предварительную интерпретацию кода.
Таким образом, развиваясь, каждая из рассмотренных архитектур, "отказавшись" от своих черт CISC
от скалярности вычислений, RISC от "простоты" системы команд, приобрела лучшие черты конкурента,
что повысило характеристики её представителей.
Это подтверждает и процессор Merced, разрабатываемый недавними противниками Intel и Hewlett
Packard. Имеющиеся сведения позволяют предположить, что его архитектура продолжит тенденции
Pentium Pro по оптимизации обработки внутренних VLIWподобных команд реализацией эффективных
архитектурных решений при одновременной оптимизации преобразования "внешних" инструкций.Особо отмечаются намерения создания двух вариантов этого чипа, различающихся лишь множеством
этих инструкций. Первый будет совместим с CISCсемейством x86, второй с RISCпроцессорами
Alpha.
Будучи "един в двух лицах", Merced ознаменует прекращение соперничества CISC и RISC, в ходе
которого представители данных архитектура улучшили свои характеристики реализацией лучших
аппаратнопрограммных решений конкурентов. Это позволяет предположить, что дальнейшее развитие
массовых процессоров пройдёт по пути развития топологических и микропрограммных решений
вычислительного ядра RISCорганизации при одновременном повышении возможностей CISCподобной
"внешней" системы команд.
Архитектура процессоров. CISC и RISC
Чтобы разработать процессор, нужны гигантские инвестиции и годы работы. Почему всё получается так
сложно? Ответ на этот вопрос кроется в истории.
Автор: Сергей Озеров | Раздел: Платформа | Дата: 25 октября 2005 года
В семидесятых годах прошлого столетия проектирование и изготовление центральных процессоров
было занятием, принципиально доступным каждому. Если какомунибудь сотруднику, скажем,
Стэндфордского университета приходила в голову интересная идея, он мог легко набрать команду,
основать фирму, найти инвесторов и уже через годдва выбросить на рынок свои CPU.
Через тридцать с небольшим лет процессоры усложнились до такой степени, что разработка хоть
скольконибудь быстрого по современным меркам кристалла требует огромной армии инженеров,
гигантских инвестиций и целого моря времени. И дело здесь отнюдь не в тонких кремниевых
технологиях и стоящих миллиарды долларов полупроводниковых фабриках просто уже в
восьмидесятых годах разработка принципиально нового CPU требовала двухтрех, а в девяностых
пятишести лет напряженной работы. Те же китайцы, даже располагая подробной информацией о
тридцатилетней истории проектирования процессоров, владея новейшими фабриками по производству
кремниевых кристаллов и не стремясь изобретать чтото новое, потратили на разработку собственного
простейшего MIPS32подобного процессора Godson (примерно эквивалентного по производительности
i486) несколько лет. Это не считая еще одного года, когда новый кристалл отлаживали. А на разработку
MIPS64подобной архитектуры с приемлемой производительностью (~Pentium III 500–600 МГц) у
китайской Академии наук ушло еще четыре года, четыре года, потраченных только на то, чтобы
повторить успех более чем двенадцатилетней давности. Но почему все получается так сложно? Чтобы
ответить на этот вопрос нам придется вернуться на 3040 лет в прошлое.
Шаг первый. CISC
Так уж исторически сложилось, что поначалу совершенствование процессоров было направлено на то,
чтобы сконструировать по возможности более функциональный компьютер, который позволил бы
выполнять как можно больше разных инструкций. Вопервых, так было удобнее для программистов
(компиляторы языков высокого уровня еще только начинали развиваться, и все понастоящему важные
программы писались на ассемблере), а вовторых, использование сложных инструкций зачастую
позволяло сильно сократить размеры написанной на ассемблере программы. А где меньше инструкций –
меньше и затраченное на исполнение программы время.
Надо признать, что достигнутые на этом пути успехи действительно впечатляли в последних версиях
ЭВМ выразительность ассемблерного листинга зачастую не уступала выразительности программы,
написанной на языке высокого уровня. Однойединственной машинной инструкцией можно было
сказать практически все, что угодно. К примеру, такие машины, как DEC VAX, аппаратно
поддерживали инструкции "добавить элемент в очередь", "удалить элемент из очереди" и даже
"провести интерполяцию полиномом" (!); а знаменитое семейство процессоров Motorola 68k почти для
всех инструкций поддерживало до двенадцати (!) режимов адресации памяти, вплоть до взятия в
качестве аргумента инструкции "данных, записанных по адресу, записанному вон в том регистре, со
смещением, записанным вот в этом регистре". Отсюда и общее название соответствующих архитектур:
CISC Complex Instruction Set Computers ("компьютеры с набором инструкций на все случаи жизни").
На практике это привело к тому, что подобные инструкции оказалось сложно не только выполнять, но и
просто декодировать (выделять из машинного кода новую инструкцию и отправлять ее на
исполнительные устройства). Чтобы машинный код CISCкомпьютеров изза сложных инструкций не
разрастался до огромного размера, машинные инструкции в большинстве этих архитектур имели
неоднородную структуру (разное расположение и размеры кода операции и ее операндов) и сильноотличающуюся длину (в x86, например, длина инструкций варьируется от 1 до 15 байт). Еще одной
проблемой стало то, что при сохранении приемлемой сложности процессора многие инструкции
оказалось принципиально невозможно выполнить "чисто аппаратно", и поздние CISCпроцессоры были
вынуждены обзавестись специальными блоками, которые "на лету" заменяли некоторые сложные
команды на последовательности более простых. В результате все CISCпроцессоры оказались весьма
трудоемкими в проектировании и изготовлении. Но что самое печальное, к моменту расцвета CISC
архитектур стало ясно, что все эти конструкции изобретались в общемто зря исследования
программного обеспечения того времени, проведенные IBM, наглядно показали, что даже
программисты, пишущие на ассемблере, все эти "сверхвозможности" почти никогда не использовали, а
компиляторы языков высокого уровня и не пытались использовать.
К началу восьмидесятых годов классические CISC полностью исчерпали себя. Расширять набор
инструкций в рамках этого подхода дальше не имело смысла, наоборот технологи столкнулись с тем,
что изза высокой сложности CISCпроцессоров оказалось трудно наращивать их тактовую частоту, а
изза "тормознутости" оперативной памяти тех времен зашитые в память процессора расшифровки
сложных инструкций зачастую работают медленнее, чем точно такие же цепочки команд,
встречающиеся в основной программе. Короче говоря, стало очевидным, что CISCпроцессоры нужно
упрощать и на свет появился RISC, Reduced Instruction Set Computer.
Шаг 2. RISC
Точно так же, как когдато CISCпроцессоры проектировались под нужды asmпрограммистов, RISC
проектировался в расчете на типовой код, генерируемый компиляторами. Для начала разработчики
свели к минимуму набор инструкций и к абсолютному минимуму количество режимов адресации
памяти; упаковав все, что осталось, в простой и удобный для декодирования регулярный машинный
код. В частности, в классическом варианте RISC из инструкций, обращающихся к оперативной памяти,
оставлены только две (Load загрузить данные в регистр и Store сохранить данные из регистра; так
называемая Load/Storeархитектура), и нет ни одной инструкции вроде вычисления синуса, косинуса
или квадратного корня (их можно реализовать "вручную"), не говоря уже о более
сложных[Канонический пример инструкция INDEX, выполнявшаяся на VAX медленнее, чем вручную
написанный цикл, выполняющий ровно тот же объем работы]. Да что там синус с косинусом в
некоторых RISCпроцессорах пытались отказаться даже от трудно реализуемого аппаратного
умножения и деления! Правда, до таких крайностей ни один коммерческий RISC, к счастью, не дошел,
но как минимум две попытки (ранние варианты MIPS и SPARC) предприняты были.
Второе важное усовершенствование RISCпроцессоров, целиком вытекающее из Load/Store
архитектуры, увеличение числа GPR (регистров общего назначения). Варианты, у которых меньше
шестнадцати GPR, большая редкость, причем почти все эти регистры полностью равноправны, что
позволяет компилятору свободно распоряжаться ими, сохраняя большую часть промежуточных данных
именно там, а не в стеке или оперативной памяти. В некоторых архитектурах, типа SPARC,
"регистровость" возведена в абсолют, в некоторых оставлена на разумном уровне; однако почти любой
RISCпроцессор обладает куда большим набором регистров, чем даже самый продвинутый CISC. Для
сравнения: в классическом x86 IA32 всего восемь регистров общего назначения, причем каждому из
них приписано то или иное "специальное назначение" (скажем, в ESP хранится указатель на стек)
затрудняющее или делающее невозможным его использование.
Среди прочих усовершенствований, внесенных в RISC, такие нетривиальные идеи, как условные
инструкции ARM или режимы работы команд. Например, некий модификатор в архитектуре PowerPC и
некоторых других показывает, должна ли инструкция выставлять по результатам своего выполнения
определенные флаги, которые потом может использовать инструкция условного перехода, или не
должна. Это позволяет разнести в пространстве инструкцию, выполняющую вычисление условия, и
инструкцию собственно условного перехода что в конвейерных архитектурах зачастую позволяет
процессору не "гадать", будет совершен переход или нет, а сразу достоверно это знать. В классическом
CISC они почти не встречаются, поскольку на момент разработки соответствующих наборов
инструкций ценность этих решений была сомнительной (они выйдут на сцену только в
конвейеризированных процессорах).Двумя основными архитектурами набора команд, используемыми компьютерной промышленностью на
большое количество машинных команд, некоторые из которых нагружены семантически аналогично
RISC И CISC АРХИТЕКТУРЫ
Архитектура набора команд служит границей между аппаратурой и программным обеспечением и
представляет ту часть системы, которая видна программисту. Система команд список всех командных слов
языка Ассемблер для данного типа процессора. Следует отметить, что это наиболее частое употребление этого
термина.
В широком смысле архитектура охватывает понятие организации системы, включающее такие высокоуровневые
аспекты разработки компьютера, как систему памяти, структуру системной шины, организацию ввода/вывода и
т.п.
современном этапе развития вычислительной техники, являются архитектуры CISC и RISC.
RISC (Reduced (Restricted) Instruction Set Computer) уменьшенный набор команд, которыми пользуется
микропроцессор компьютера, содержащий только наиболее простые команды.
Эти процессоры обычно имеют набор однородных регистров универсального назначения, причем их число может
быть большим. Система команд отличается относительной простотой, коды инструкций имеют четкую структуру,
как правило, с фиксированной длиной. В результате аппаратная реализация такой архитектуры позволяет с
небольшими затратами декодировать и выполнять эти инструкции за минимальное число тактов синхронизации.
Определенные преимущества дает и унификация регистров.
CISC (Complete Instruction Set Computer) полный набор команд микропроцессора.
Состав и назначение их регистров существенно неоднородны, широкий набор команд усложняет декодирование
инструкций, на что расходуются аппаратные ресурсы. Возрастает число тактов, необходимое для выполнения
инструкций. К процессорам с полным набором инструкций относится семейство х86.
Лидером в разработке CISCпроцессоров считается компания Intel со своей серией x86 и Pentium. Эта
архитектура является практическим стандартом для рынка микрокомпьютеров. Для CISCпроцессоров
характерно:
сравнительно небольшое число регистров общего назначения;
операторам высокоуровневых языков программирования и выполняются за много тактов;
большое количество методов адресации;
большое количество форматов команд различной разрядности;
преобладание двухадресного формата команд;
наличие команд обработки типа регистрпамять. Основой архитектуры современных рабочих станций и
серверов является RISC архитектура. Понятие RISC сформировалось на базе трех исследовательских проектов:
процессора 801 компании IBM, процессора RISC университета Беркли и процессора MIPS Стенфордского
университета. Главными идеями этих машин было отделение медленной памяти от высокоскоростных регистров и
использование регистровых окон. Эти три процессора имели много общего. Все они придерживались архитектуры,
отделяющей команды обработки от команд работы с памятью, и делали упор на эффективную конвейерную
обработку. Система команд разрабатывалась таким образом, чтобы выполнение любой команды занимало
небольшое количество машинных тактов (предпочтительно один машинный такт). Сама логика выполнения команд
с целью повышения производительности ориентировалась на аппаратную, а не на микропрограммную реализацию.
Чтобы упростить логику декодирования команд, использовались команды фиксированной длины и
фиксированного формата. Среди других особенностей RISC архитектур следует отметить наличие достаточно
большого регистрового файла (в типовых RISCпроцессорах реализуются 32 или большее число регистров по
сравнению с 816 регистрами в CISC архитектурах), что позволяет большему объему данных храниться в
регистрах на процессорном кристалле более длительное время и упрощает работу компилятора по распределению
регистров под переменные. Для обработки данных процессора с RISC архитектурой, как правило, используются
трехадресные команды, что помимо упрощения дешифрации дает возможность сохранять большее число
переменных в регистрах без их последующей перезагрузки. Ко времени завершения университетских проектов
(19831984 гг.) обозначился также прорыв в технологии изготовления сверхбольших интегральных схем. Простота
архитектуры и ее эффективность, подтвержденная этими проектами, вызвали большой интерес в компьютерной
индустрии и с 1986 года началась активная промышленная реализация архитектуры RISC. К настоящему времени
эта архитектура прочно занимает лидирующие позиции на мировом компьютерном рынке рабочих станций и
серверов. Развитие архитектуры RISC в значительной степени определялось прогрессом в области создания
оптимизирующих компиляторов. Именно современная техника компиляции позволяет эффективно использовать
преимущества большего регистрового файла, конвейерной организации и большей скорости выполнения команд.
Современные компиляторы используют также преимущества другой оптимизационной техники для повышения
производительности, обычно применяемой в процессорах RISC: реализацию задержанных переходов и
суперскалярной обработки, позволяющей в один и тот же момент времени выдавать на выполнение несколько
команд. Следует отметить, что в последних разработках компании Intel, а также ее последователейконкурентов
(AMD, Cyrix и др.) широко используются идеи, реализованные в RISCмикропроцессорах, так что многие различиямежду CISC и RISC стираются. Однако сложность архитектуры и системы команд x86 остается и является
главным фактором, ограничивающим производительность процессоров на ее основе.