В этом материале мы попытаемся ответить на столь непростой технический вопрос понятным русским языком.
Сегодня трудно представить жизнь без многочисленных компьютерных устройств, разнообразных мобильных и стационарных систем, включая смартфоны, планшеты, ноутбуки, десктопы, мощные рабочие станции, серверы и т. п.
Среди важнейших компонентов, входящих в состав компьютерных изделий, центральный процессор (далее просто процессор) занимает особое место. Это фактически «мозг» компьютерного устройства, представленный одним или несколькими полупроводниковыми чипами. Внутренние схемы этих чипов сегодня нередко состоят из сотен миллионов, а в ряде случаев даже из десятков миллиардов транзисторов. При этом размеры транзисторов в настоящее время составляют примерно 10–20 нм и имеют тенденцию к дальнейшему уменьшению по мере развития полупроводниковых технологий. Объединены все эти транзисторы в очень сложные структуры, которые определяют внутреннее устройство и функциональные возможности процессоров и, как следствие, конечных компьютерных изделий.
С чего всё начиналось
В настоящее время на рынке есть сотни моделей самых разных процессоров. Подавляющее число их создано в соответствии с несколькими распространенными архитектурами. Основные свойства этих архитектур будут рассмотренных ниже, но сначала небольшой экскурс в историю разработки процессоров.
Анализируя современные процессоры, необходимо отметить, что, несмотря на огромную внутреннюю сложность и разнообразие этих важнейших компонентов компьютерных систем, их функции, по сути, сравнительно просты. Действительно, все сводится к тому, что процессор с очень высокой скоростью читает инструкции из оперативной памяти и в соответствии с ними выполняет различные операции. Говоря простыми словами, процессорные инструкции указывают компьютерному устройству, что и в каком порядке необходимо делать. Есть, правда, в такой простоте одна любопытная особенность, заключающаяся в том, что команды, как и данные, над которыми должны быть произведены необходимые операции, — это просто наборы двоичных чисел. Отличить же команды от данных процессору помогают системные и прикладные программы. Они с учетом внутренней микроархитектуры и системы команд задают адреса и последовательность загрузки двоичных чисел, которые интерпретируются либо как команды, либо как данные, определяют действия и судьбу полученных результатов.
Первым массовым процессором стал, как известно, Intel 4004 (i4004). Это был 4-битный микропроцессор, разработанный корпорацией Intel и выпущенный 15 ноября 1971 года. Его набор команд насчитывал 46 инструкций, тактовая частота была равна 92,6 кГц, время выполнения одной инструкции составляло 8 тактов. Вторым стал чип i8008, который унаследовал многие решения своего предшественника. Это был 8-битный микропроцессор, разработанный Intel и выпущенный в 1972-м. Набор команд i8008 — 48 инструкций, тактовая частота — 500 кГц (200–800 кГц), выполнение команд занимало от 10 до 22 тактов генератора. В 1974 году появился i8080: 8 бит, 80 инструкций, тактовая частота 2 МГц (позже 2,5, 3,1, 4 МГц), выполнение команд занимало от 4 до 11 циклов тактового генератора. Его производительность была в 10 раз больше производительности i8008. Спустя четыре года появился i8086: 16 бит, 98 инструкций, тактовая частота 4–16 МГц, команды требуют от 2 до 184 циклов, а еще через год появился i8088, послуживший основой персональных компьютеров IBM PC и IBM PC/XT.
Оценивая параметры и эволюцию указанных и последующих изделий, следует отметить неуклонный рост тактовых частот и постоянное расширение наборов выполняемых команд. Тем не менее, несмотря на архитектурные изменения внутренних структур процессоров, конструкторы старались максимально сохранить программную совместимость. Постепенно для процессоров Intel и многочисленных их клонов, созданных другими компаниями, появился ряд стандартов и рекомендаций для разработчиков и пользователей. Они были объединены в некий набор, получивший наименование x86 (от Intel 80×86). Под этим наименованием понимается процессорная архитектура и одноименный набор команд, которые были впервые реализованы в соответствующих изделиях Intel. Кстати, название образовано от двух цифр, которыми заканчивались названия процессоров Intel ранних моделей.
Эволюция CISC
За время своего существования набор процессорных команд постоянно расширялся, сохраняя совместимость с предыдущими поколениями. Однако постепенно стало очевидно, что 32-битное адресное пространство архитектуры x86 ограничивает производительность приложений. Действительно, 32-разрядное адресное пространство позволяет процессору осуществлять непосредственную адресацию лишь 4 Гбайт данных, что часто недостаточно для современных приложений. Для решения этой проблемы было предложено ввести 64-разрядное расширение к уже существующей 32-разрядной архитектуре x86. Новая версия архитектуры получила название EM64T, или чаще x86-64, хотя по старинке нередко называют просто x86.
По мере совершенствования полупроводниковых технологий, внутреннего устройства процессоров и усложнения аппаратно-программного обеспечения компьютеров, призванных решать все более сложные задачи, состав x86 дополнялся различными расширениями. В качестве примера можно привести следующие наборы: x87, IA-32, MMX, SSE, SSE2, x86-64, SSE3, SSSE3, SSE4, SSE5, AVX, AVX2, SGX. Эти и последующие расширения, поддержанные соответствующими электронными средствами, интегрированными в состав процессоров, призваны увеличить производительность и сократить время разработки и выполнения программ.
Конечно, совершенствование и расширение наборов команд является важным, но не единственным направлением в обеспечении высоких уровней производительности процессоров. Очевидно, что производительность пропорциональна числу выполняемых команд в секунду. Она увеличивается с ростом тактовой частоты, но существенно зависит от реализации команд. При этом выполнение каждой из них требует нередко десятков, а иногда и сотен циклов тактового генератора. Это означает, что для реализации сложных команд понадобится больше времени, чем для выполнения простых. Компенсировать эту особенность и повысить производительность удается внедрением соответствующих конструкторских решений и новых технологий. В качестве примера можно привести две интересные разработки, внедренные в процессоры разных производителей, начиная с Intel Pentium (1993 г.). Речь идет о суперскалярности и суперконвейерности.
Суперскалярность — это поддержка параллелизма на уровне инструкций. Другими словами, суперскалярный процессор может выполнять более одной операции за один такт, то есть несколько инструкций одновременно. Обычно данная возможность достигается увеличением количества одинаковых функциональных узлов процессора (АЛУ, FPU и др.), способных работать одновременно. Это обеспечивает существенный рост производительности процессора и, как следствие, всей системы.
Здесь целесообразно напомнить способы увеличения производительности, которые могут использоваться совместно:
применение конвейера;
увеличение количества функциональных узлов процессора (суперскалярность),;
увеличение количества ядер (многоядерность);
увеличение количества процессоров (многопроцессорность).
Конвейер — это способ организации вычислений, применяемый в современных процессорах и контроллерах для повышения их производительности (увеличения числа инструкций, выполняемых в единицу времени). При использовании конвейера количество узлов остается прежним, увеличение же производительности достигается за счет одновременной работы узлов, ответственных за разные стадии обработки инструкций одного потока.
Благодаря суперскалярности увеличение производительности достигается за счет одновременной работы большего количества одинаковых узлов, независимо обрабатывающих инструкции одного потока (в том числе и большего количества конвейеров). В процессе работы на вход процессора поступает поток инструкций, рассчитанных на последовательное исполнение. Процессор может детектировать независимые операции и запускать их параллельно (суперскалярность) и даже менять их порядок (внеочередное исполнение).
При использовании нескольких ядер каждое ядро выполняет инструкции отдельного потока, причем каждое из них может быть суперскалярным и/или конвейерным. При применении нескольких процессоров каждый процессор может быть многоядерным, что соответствующим образом увеличивает число обрабатываемых потоков.
Суперконвейерность означает, что процессор имеет несколько вычислительных конвейеров. К слову сказать, у Intel Pentium их было два, что позволяло ему при одинаковых частотах в идеале быть вдвое производительней своего предшественника в лице i486, выполняя сразу две инструкции за такт. С дальнейшим же увеличением числа конвейеров еще больше возрастает производительность, что и реализуется в более мощных процессорах.
Остается добавить, что указанные решения демонстрируют особенности эволюции процессоров CISC, к которым относятся широко известные мобильные, десктопные и серверные модели, созданные не только корпорацией Intel, но и рядом других компаний, например, AMD, Motorola, IBM.
CISC (Complex Instruction Set Computing или Complex Instruction Set Computer) — тип архитектуры процессора с полным набором команд, характеризуется следующими свойствами:
нефиксированное значение длины команды;
арифметические действия кодируются в одной команде;
небольшое число регистров, каждый из которых выполняет строго определённую функцию.
Основоположником CISC-архитектуры многие эксперты считают фирму IBM с архитектурой IBM/360. При этом подходе выполнение любой сколь угодно сложной команды из системы команд процессора реализуется аппаратно средствами процессора. Этот тип архитектуры предусматривает наличие больших наборов команд. Среди них значительную долю составляют сложные. Их выполнение осуществляется в течение нередко большого числа тактов тактового генератора. Использование сложных команд позволяет решать большое количество задач, упрощает программирование, помогает сократить размер программ и время их разработки. В качестве примеров процессоров CISC-архитектуры можно привести большинство процессоров Intel и AMD.
Однако этому типу архитектуры присущи и принципиальные недостатки, связанные, прежде всего, со сложностью реализации упомянутых функциональных узлов и технологий, а также проблемы с распараллеливанием вычислений сложных команд.
Нельзя сказать, что существующих проблем с архитектурой CISC не видели разработчики процессоров, но их изобретательский потенциал ограничен наличием огромного количества уже разработанного аппаратно-программного обеспечения. Тем не менее поиски оптимальных путей развития не прекращаются.
RISC: достоинства и недостатки
Одним из альтернативных вариантов CISC-архитектуре является RISC, чья разработка интенсивно развивается с восьмидесятых годов прошлого столетия, то есть вскоре после появления первых процессоров Intel. RISC (Restricted (Reduced) Instruction Set Computer — компьютер с сокращенным набором команд) — архитектура процессора, в которой быстродействие увеличивается за счет упрощения инструкций благодаря исключению из набора сложных команд, требующих для своего выполнения большого числа тактов. Такой подход делает декодирование простым, а время выполнения — малым. В процессорах с архитектурой RISC применяется ограниченный набор быстрых команд. Согласно идеологии RISC, все команды должны выполняться всего за один такт. Это облегчает повышение тактовой частоты и значительно упрощает реализацию суперскалярности (распараллеливание инструкций между несколькими исполнительными блоками). В чипах архитектуры RISC по сравнению с вариантами CISC содержится меньшее количество транзисторов. Это упрощает разработку процессоров, снижает площадь их полупроводниковых кристаллов, уменьшает себестоимость, предоставляет конструкторам возможность снизить уровни энергопотребления и теплообразования.
Недостатки архитектуры RISC прямо связаны с ее некоторыми преимуществами. Так, из-за исключения из набора сложных команд выполнение некоторых функций требует применения нескольких простых команд вместо одной сложной. Это удлиняет код программ, предполагает бóльшие объемы памяти, увеличивает трафик. Исследования показали, что программы в системах RISC в среднем на 30% длиннее программ в системах CISC. Тем не менее архитектура RISC развивается и находит все больше сторонников среди производителей не только относительно простых контроллеров и встраиваемых систем, но и мобильных и стационарных компьютерных устройств, и даже серверов. Остается добавить, что идеи RISC нашли воплощение в многочисленных моделях процессоров архитектуры MIPS и ARM.
Примеры реализации RISC-архитектуры
MIPS (сокращение от названия соответствующего проекта Стэнфордского университета — Microprocessor without Interlocked Pipeline Stages) — система команд и микропроцессорных архитектур, разработанных компанией MIPS Computer Systems в соответствии с концепцией проектирования процессоров RISC. Ранние модели процессоров имели 32-битную структуру, позднее появились его 64-битные версии. Существует несколько наборов команд: MIPS32, MIPS64, microMIPS и nanoMIPS. Помимо этого, доступны дополненные наборы инструкций и модели процессоров. С середины до конца 1990-х годов каждым третьим микропроцессором на рынке был процессор под управлением MIPS. В настоящее время различные реализации MIPS используются в основном во встроенных системах — например, в шлюзах, маршрутизаторах, во встраиваемых системах, контроллерах, смартфонах, игровых приставках, видеоплеерах.
Процессоры архитектуры MIPS разработали и выпустили многие компании, среди которых, например, Broadcom, NEC, Realtek, Toshiba. В мае 2015 года российская компания «Байкал Электроникс» (Baikal Electronics) объявила о тестировании своего первого продукта — процессора Baikal-T1 на ядре MIPS Warrior. В том же году был выпущен первый коммерческий продукт на этом процессоре.
ARM (Advanced RISC Machine — усовершенствованная RISC-машина) — система команд и семейство описаний и готовых топологий 32- и 64-битных микропроцессорных/микроконтроллерных ядер, разрабатываемых компанией ARM Limited. Среди лицензиатов готовых топологий ядер ARM много известных компаний, в их числе, например, AMD, Apple, Analog Devices, Intel, Marvell, NXP, STMicroelectronics, Samsung, LG, MediaTek, Qualcomm, Sony, Texas Instruments, Nvidia, HiSilicon, «Байкал электроникс». При этом немало лицензиатов проектируют собственные топологии ядер на базе системы команд ARM. Многие специалисты считают процессоры ARM перспективными для применения в серверах. В настоящее время процессоры ARM широко используются в потребительской электронике: в смартфонах, мобильных телефонах, аудио- и видео плеерах, игровых консолях, калькуляторах, «умных» часах и компьютерных периферийных устройствах, таких как жесткие диски или маршрутизаторы. Эти процессоры имеют низкое энергопотребление, а потому находят широкое применение во встраиваемых системах и преобладают на рынке мобильных устройств, для которых данный фактор критически важен. Кстати, российская компания «Байкал Электроникс» разработала микропроцессор Baikal-M на базе 8 ядер ARM Cortex-A57 и GPU Mali-T628. В 2020 году были представлены ARM-процессоры Байкал-М/2, Байкал-М/2+ и Байкал-S (16-нм техпроцесс, 48 ядер ARM-Cortex A75 с частотой 2 ГГц).
Оценивая особенности архитектур CISC и RISC, необходимо отметить, что они находятся в постоянном развитии. Более того, в своей эволюции каждая из них часто заимствует достоинства и решения соперника. Таким образом, в некоторых процессорах можно найти узлы и технологии обеих архитектур, что делает их, по сути, гибридными. Портированные узлы и технологии улучшают функциональные и потребительские возможности процессоров, повышают их производительность, но не делают их универсальными. Такие процессоры остаются либо в группе CISC, либо в группе RISC. Данное обстоятельство накладывает соответствующие ограничения на использование программного обеспечения. Здесь уместно еще раз напомнить, что процессоры CISC и RISC имеют разные наборы команд. Это не позволяет без соответствующего перекодирования осуществлять беспроблемный перенос системных и прикладных программ между компьютерными устройствами CISC и RISC.
В заключение остается добавить, что рассмотренными вариантами не исчерпывается все многообразие архитектур современных процессоров. Приведенный обзор — это упрощенный взгляд на эволюцию процессоров, в реальности же все намного сложнее и интереснее. Поэтому — продолжение следует…