Выбирай : Покупай : Используй

Вход для партнеров

Вход для продавцов

Обзор российского 4-ядерного процессора Эльбрус-4С. Часть 2: архитектура

В этой статье мы продолжаем рассмотрение уникальной архитектуры отечественных микропроцессоров «Эльбрус», продолжая тему, начатую в первой части. Речь пойдёт о том, чем эта архитектура отличается от подходов, принятых у доминирующих на рынке процессоров известных производителей, её преимуществах и недостатках.
Автор Владимир Иванов
Обзор российского 4-ядерного процессора Эльбрус-4С. Часть 1: История создания Читать
Обзор российского 4-ядерного процессора Эльбрус-4С. Часть 3: Тесты, сравнение с Intel Читать

RISC, CISC, и всякое такое

Все выпускаемые сегодня процессоры делятся на два больших класса: процессоры с сокращённым набором команд, или RISC (Reduced Instruction Set Computing), и процессоры с полным набором команд, или CISC (Complete Instruction Set Computing). Набор команд первых из них отличается аскетичностью, сами команды однотипны и выполняются за небольшое фиксированное время, что позволяет эффективнее наращивать тактовую частоту. Зато в CISC-системе команды более универсальны, что несколько упрощает написание программного кода.

С точки зрения программиста, все x86-совместимые процессоры являются CISC-процессорами, но на самом деле, их современные модели спроектированы на основе RISC-ядра. Выполнение CISC-команд эмулируется аппаратурой процессора путём их преобразования «на лету» в команды RISC-ядра с помощью специального блока декодирования инструкций и микропрограммы-транслятора.. Такой подход позволяет повысить эффективность работы при сохранении совместимости, а также позволяет исправлять некоторые ошибки проектирования уже после выпуска чипа в серийное производство. Это достигается путём изменения кода микропрограммы-транслятора, обычно выполняемого средствами BIOS той системной платы, куда установлен процессор (именно об этом идёт речь, когда производители выпускают модификации BIOS, «совместимые с процессором таким-то»: то есть, в него внесена модифицированная версия микропрограммы для этой модели процессора, исправляющая некоторые ошибки, тогда как сам процессор будет прекрасно работать и на «несовместимом» BIOS’е).

Когда программист или компилятор создаёт программу в виде последовательности ассемблерных инструкций, то подразумевается, что они будут исполняться последовательно, одна за другой, и исполнение каждой инструкции полностью завершается перед запуском на исполнение следующей инструкции. Так устроены системы команд всех RISC и CISC процессоров. Первые модели процессоров были способны выполнять не больше одной инструкции за один такт, и это ограничение не создавало неудобств. Но со временем технология позволила делать всё более сложные чипы, и тогда для увеличения производительности стали «учить» процессор выполнять по нескольку инструкций за такт. Это свойство называется суперскалярностью. Но есть проблема: нельзя просто так запускать параллельно несколько операций, потому что среди них могут быть зависимости. Например, одна инструкция читает число из памяти в регистр, а следующая – инкрементирует полученное значение  в регистре. Их можно запускать только последовательно, но в самих инструкциях нет информации об их взаимозависимости. Поэтому нужна специальная и сложная аппаратура, детектирующая зависимости и гарантирующая корректность исполнения инструкций «вне очереди».    Все современные x86-совместимые микропроцессоры – суперскалярные. Например, самые современные чипы на архитектуре Haswell выполняют до восьми операций за такт. Но объём аппаратуры анализа зависимостей для такого числа операций весьма велик, и поэтому чипы получаются сложными и «горячими».

Заметим, что речь идёт именно о микрооперациях RISC-ядра, а вовсе не об инструкциях x86, да ещё и на их вид наложены некоторые ограничения (например, арифметических операций и операций с памятью может быть не более половины от этого числа).

Процессоры архитектуры «Эльбрус» построена по принципу VLIW, или очень широкого командного слова (Very Large Instruction Word). Этот подход можно считать разновидностью RISC – коротких команд с фиксированным временем выполнения, с тем отличием, что каждая команда содержит не одну, а много элементарных операций (вплоть до 23-х). Загрузить такой широкий конвейер на 100% непросто, поэтому разработчики переложили выделение зависимостей и оптимизацию порядка выполнения команд на плечи компилятора. И в самом деле: компилятор, запускающийся на этапе перевода программы, написанной на языке высокого уровня (или ассемблере), в машинные коды, обладает гораздо большими ресурсами, а также большим доступным временем (в разумных пределах, конечно), поэтому эффективность его работы может быть выше, чем у аппаратного блока анализа зависимостей. Используя алгоритмы, имеющие много независимых операций (и поэтому хорошо поддающиеся оптимизации), программист может получить производительность, заметно превосходящую предел возможностей процессора AMD/Intel, работающего на той же частоте. Кристалл процессора в результате получается проще и надёжнее, и потребляет меньшую мощность.

x86-совместимость «в нагрузку»

Объём написанного на сегодня кода в среде x86 столь велик, что игнорировать его не может себе позволить ни один, даже самый крупный, производитель процессоров. Компания Intel однажды смогла «провернуть» такой фокус, отказавшись от аппаратной поддержки процессоров 8080 и перейдя на новую на тот момент архитектуру 386, но суммарный объём существующего кода был тогда на несколько порядков меньше. Повторить этот смертельный трюк вряд ли удастся кому-либо в обозримом будущем, удел смельчака – узкоспециализированная ниша, занять которую он обречён в этом случае (ARM-процессоры, доминирующие на смартфонах, лучшее тому подтверждение).

Основной средой выполнения прикладных программ на системе «Эльбрус» служит ОС «Эльбрус» (кто бы мог подумать!), являющаяся доработанной разновидностью ОС Linux с ядром 2.6.33, скомпилированной целиком из общедоступных исходников. Заметим, что хотя это ядро является достаточно старым, оно поддерживает работу подавляющего большинства современных библиотек, и несмотря на это, идёт полным ходом адаптация для ОС нового ядра 3.10.

Версия для печати
http://www.rbc.ru/