Как программировать процессор эльбрус

Обновлено: 07.07.2024

На сайте АО «МЦСТ» появилась новость о доступности руководства по эффективному программированию на платформе Эльбрус; в нём также содержится глава с описанием системы команд «Эльбрус», ранее не публиковавшейся. Книга выпущена под лицензией Creative Commons (CC-BY 4.0) в форматах HTML (архив) и PDF; для удобства чтения HTML выложен мною в развёрнутом виде.

По сути это второй день рождения архитектуры «Эльбрус» — хотя и первый был в некотором смысле сразу двойным, ведь начало разработке было положено в семидесятых годах, уже после рокового правительственного решения 1967 года закрыть все существовавшие тогда в СССР линии развития отечественных ЭВМ и сосредоточиться на клонировании западной аппаратуры ради возможности копировать программное обеспечение.

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

Тем не менее исторически система команд вычислительных комплексов «Эльбрус» была закрытой и не документированной публично, поскольку эти машины активно применялись в военных системах и засекречивание всего и вся затронуло и их; при этом вторая линейка процессоров разработки МЦСТ (например, R500) начиналась как раз с открытой Sun Microsystems системы команд SPARC v8.

Соответственно единственным возможным разработчиком компиляторов под «Эльбрус» были сами создатели платформы; это и хорошо в плане взаимной оптимизации аппаратуры и средств разработки, и плохо в плане ограниченности ресурсов и необходимости отслеживать как более новые стандарты языков, так и получившие распространение расширения популярных компиляторов (в первую очередь GCC). Например, LCC 1.24 «умеет» C, C++ и Fortran, но трансляторы языков вроде Go, Rust, Objective C или D на его базе недоступны.

Стоит отметить, что в данный момент известны как документированные, но закрытые системы команд (x86, ARM, POWER), так и несколько открытых, доступных для воспроизведения силами сторонних компаний (SPARC, OpenRISC, RISC-V). Есть и пограничные случаи — например, отечественный процессор BE-T1000 (ранее «Байкал-Т1») построен на лицензированной системе команд MIPS (точнее, MIPS32r5 LE), следующая ревизия которой, r6, была положена в основу проекта MIPS Open, но затем вновь оказалась закрытой вместе с этим проектом в силу финансовых затруднений западной компании-владельца.

Сами программные наработки МЦСТ под «Эльбрус» пока остаются под соглашением о неразглашении, что не даёт частным лицам возможности приобретать такие компьютеры (хотя ИП уже её имеют); надеемся, публикация исходных кодов под соответствующими лицензиями будет давно ожидаемым следующим шагом к широкому распространению платформы в стране и мире.

Тем временем новое поколение разработчиков уже имеет материал для самообразования по актуальной и перспективной теме отечественной вычислительной техники; будем надеяться, что молодые таланты смогут применить полученные знания не только в рамках особых мероприятий (как ярославская «ПроеКТОриЯ»), а и в повседневной жизни — на домашнем и рабочем компьютере.

PS: новость традиционно отправлена с «Эльбруса» — двухместной 801-РС :)

Как и предсказывал ранее CNews, российская компания МЦСТ впервые выложила в публичный доступ руководство по программированию для вычислительной платформы «Эльбрус», в которое также включено исчерпывающее описание системы микропроцессорных команд.

Пакет документов по программированию для платформы «Эльбрус» включает подробное описание ассемблера и системы команд семейства одноименных чипов и общее описание платформы и фирменного компилятора LCC. В пакет вошло подробное руководство для программистов, которые портируют или оптимизируют свои программные продукты для решений на базе «Эльбрусов» на языках C и C++, а также описание особенностей оптимизации и техники повышения производительности программного кода.

Документация по работе с отечественной микропроцессорной платформой уже доступна на сайте компании и представлена под открытой лицензией Creative Commons (CC-BY 4.0), которая позволяет сторонним пользователям свободно перерабатывать, развивать, вносить исправления и распространять продукт, в том числе, в коммерческих целях, но при соблюдении обязательного условия указания автора исходной работы. Документы доступны для скачивания в форматах HTML и PDF.

«Эльбрус» по открытой лицензии

Представленное МЦСТ руководство по программированию для платформы «Эльбрус» применимо с любой операционной системой на базе Linux. В него вошли материалы по адаптации имеющегося кода к «Эльбрусам» для корректной работы ПО, описание приемов компиляции программ, примеры ассемблера и отладки.

vliw4.jpg

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

vliw3.jpg

Отдельные главы руководства посвящены описанию теоретических основ построения вычислительной платформы на микроархитектуре «Эльбрус», применению оптимизированных библиотек для использования эффективных алгоритмов и рекомендациям по оптимизации ПО с эмпирическими правилами для работы с производительностью в типовых ситуациях.

Для тех, кто планирует писать архитектурно-зависимый код, в руководстве представлен подробный справочный блок с детальным описанием интерфейсных программных соглашений и команд микропроцессора.

vliw5.jpg

vliw2.jpg

Пример работы конвейера вычислительного ядра «Эльбруса»

В описании архитектуры «Эльбрус» подробно описан принцип использования «очень длинных машинных команд» (VLIW), специфика применения компилятора процессора для анализа зависимостей и оптимизации порядка исполнения операций и другие отличия от «традиционных» процессоров с архитектурой RISC/CISC.

vliw1.jpg

Сравнение исполнения кода OOOSS (out-of-order superscalar) и VLIW

Есть описание процесса распараллеливания вычислительного процесса по всему полю возможных вычислительных устройств в процессе компиляции, растолкованы особенности работы регистрового файла при распараллеливании инструкций, специфики спекулятивного и предикативного режима выполнения команд, асинхронного доступа к массивам и других определяющих свойств архитектуры «Эльбрусов», позволяющих добиться высокой энергоэффективности и производительности при задании явного параллелизма операций.

Успехи современных процессоров «Эльбрус»

Разделяй и зарабатывай: сегментация сети создает новые источники дохода


Для исследования были использованы ресурсы тематического проекта RakeSearch Карельского научного центра Российской академии наук. По итогам тестов выяснилось, что скорость однопоточных вычислений на «Эльбрус-8C» проигрывает современным процессорам для настольных ПК в два-четыре раза, но в то же время при сравнении с серверными процессорами разрыв уменьшается до полутора-двух раз.

elbrus2.jpg

С учетом того, «Эльбрус-8C» обладает меньшим числом ядер, вычислительных потоков и более низкой тактовой частотой, автор исследования сделал вывод о том, что его производительность на такт как минимум не хуже, чем у лучших десктопных и серверных процессоров.

В случае с десктопными процессорами в системе может быть только один процессор, в серверных системах на Xeon E5 — до двух CPU, но в случае с «Эльбрус-8С» в сервер можно поставить до четырех процессоров. Это существенно уменьшает отставание в ситуации, когда у Xeon E5-2683 v3, выпущенного в 2014 г., на один сокет приходится 14 ядер (и 28 потоков), а у «Эльбруса» — восемь. Двусокетной машине с 28 ядрами уже сейчас можно сопоставить машину на «Эльбрусе» с 32, заключил автор исследования.

elbrus600.jpg

Сервер на «Эльбрусах» для суперкомпьютера с водяным охлаждением

Суперкомпьютер для большей энергоэффективности получил охлаждение горячей водой и при необходимости может задействовать интерконнект «Ангара» отечественной разработки. Суперкомпьютер обладает высокой удельной вычислительной плотностью: при необходимости в одну стойку может уместиться 153 blade-сервера с четырьмя процессорами «Эльбрус-8С» каждый. В итоге пиковая производительность на один сервер составляет 0,5 Терафлопс, а производительность одной стойки достигает 75 Терафлопс.

МЦСТ сохранит архитектуру SPARC

Ранее, рассуждая о перспективах развития компании в обозримом будущем, заместитель гендиректора МЦСТ по маркетингу Константин Трушкин сообщил CNews о том, что компания не намерена отказываться от разработки архитектуры SPARC, альтернативной «Эльбрусам». На базе архитектуры SPARC, в частности, выполнены процессоры МЦСТ R-1000 и МЦСТ R-2000. Второй из этих чипов увидел свет в начале 2018 г. и предположительно будет востребован в телеком-оборудовании. В МЦСТ наработки на SPARC считают истинно своими, хотя и признают, что система команд в них лицензированная.

Архитектура SPARC (Scalable Processor Architecture — масштабируемая архитектура процессора) была разработана в середине 1980 гг. компанией Sun Microsystems, но спустя несколько лет ее спецификации стали общим достоянием. С 1989 г. развитием архитектуры занимается независимая некоммерческая организация SPARC International, продающая разработчикам лицензии на ее модификации.

SPARC была задумана как архитектура, сочетающая простоту набора команд и высокую скорость исполнения кода. В настоящий момент используется для процессоров, ориентированных на создание одноплатных встраиваемых ЭВМ и промышленных компьютеров.

В МЦСТ отмечают недостаток что ресурсов для развития обеих архитектур, однако намерены продолжать развитие линейки SPARC, поскольку на рынке эта архитектура востребована, у компании есть специалисты в области архитектуры SPARC, и имеются определенные успехи в этой области.

Так же примечательно то что Эльбрус может запросто эмулировать обычный х86 процессор, как и любые другие. А это значит что на компе с Эльбрусом можно запустить винду, или андроид, или любую другую экзотическую систему - и все это в одном и том же компе. То есть на нём можно запускать не просто уже существующее ПО а вообще ВСЁ существующее ПО на всех любых платформах. А значит он может в принципе выйти на широкий рынок. Но он круче чем обычный x86 и специализированное именно под него ПО будет гораздо мощней чем то что могут выдавать х86 процессоры.

В общем в потенциале все это действительно очень круто и потенциал у этой архитектуры таков что она в перспективе может не просто конкурировать а вытеснить архитектуру х86. Но путь к этому конечно предстоит долгий.

А пока скорей всего мы не увидим этих процессоров в широком доступе. Он пойдет в оборонку и разного рода закрытые специализированные применения.

Но! Я подозреваю что на самом деле все несколько интересней. Дело в том что в x86 процессорах скорей всего тоже есть нечто подобное на низком уровне. Существует микрокод который реализует архитектуру x86 но доступа к нему нет и информации в открытом доступе нет. То есть архитектура x86 по всей видимости намернно держится для того чтобы извлекать больше прибыли за счет медленного роста производительности в то время как открытие доступа к микрокоду резко бы дало сразу предельные возможности, раскрытие которых запланировано только на следующие годы. То есть грубо говоря разработчики процессоров x86 дурят народ - их процессоры реально могут работать намного мощней но эта возможность намеренно закрыта и используется самими разработчиками чтобы постепенно но гарантированно повышать производительность процессоров и за счет этого постепенного роста производительности получать сверхприбыли продавая каждый год все более и более быстрые процессоры, вынуждая пользователей выбрасывать все старые и покупать новые.

Если же на этот рынок влезет Эльбрус это будет означать что? Это будет означать что вся эта политика обмана покупателя будет грубо сломана. Производители x86 процессоров будут вынуждены либо раскрыть микрокод для широкого пользователя и потерять источник сверхприбылей на годы вперед. Либо . начать войну с целью уничтожить конкурента нечестными методами.

Но даже если они раскроют микрокод может так случиться что высвобожденной вычислительной мощности окажется не достаточно чтобы конкурировать с Эльбрусом потому что он изначально не ориентирован на попытку эмуляции любой ценой архитектуры x86 и соответственно не имеет определенной обузы на которую приходится тратиться разработчикам x86. В общем ложь она создает трудности сама для себя, а Эльбрус изначально ориентирован на открытое извлечение полной вычислительной мощности без обмана и поэтому не имеет этой обузы, ненужного отягчения. А значит вполне может оказаться недосягаемым для конкурентов. Ну во всяком случае в первое время. Ведь это вынудит остальных разработчиков не просто разблокировать потенциалы архитектуры которую они эксплуатировали много лет а придумывать что-то действительно принципиально новое, а они за долгое время делать это разучились и обленились, так что им придется нелегко.


МЦСТ, создающая отечественные «Эльбрус», предоставила всем желающим доступ к набору микропроцессорных команд. Документация распространяется по открытой лицензии.

Любое использование

Компания МЦСТ представила руководство по разработке программ, совместимых с процессором «Эльбрус». Документация включает детальное описание ассемблера и системы команд чипов, информацию об особенностях работы фирменного компилятора LCC, советы по портированию С и С++ приложений на отечественный процессор, сведения о приемах по оптимизации программ и повышению производительности устройства.

Руководство по разработке под платформу «Эльбруса» выложено на официальном сайте МЦСТ. Оно распространяется по лицензии Creative Commons (CC-BY 4.0), которая позволяет сторонним разработкам использовать и изменять продукт, в том числе и для коммерческих целей. Обязательно лишь указание авторов исходников.

Подробности документации

Документация предназначена для разработчиков, желающих выпускать Linux-приложения для устройств на базе процессора «Эльбрус». В материалах МЦСТ изложены сведения об адаптации уже написанного кода к отечественному чипу, перечислены приемы компиляции и отладки программ.

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

Документация также рассматривает теоретические основы построения вычислительной платформы на микроархитектуре «Эльбрус», особенности применения оптимизированных библиотек, рекомендации по улучшению производительности приложений с эмпирическими правилами для работы в стандартных ситуациях.

Об архитектуре

Рассмотрение архитектуры «Эльбрусов» также включает принципы применения «очень длинных машинных команд» (VLIW), специфику использования компилятора чипа для анализа зависимостей и оптимизации порядка исполнения операций. Детально описаны прочие отличительный черты отечественной разработки от «традиционных» процессоров с архитектурой RISC/CISC.

Они что, выложили в открытый доступ систему команд? Аттракцион невиданной щедрости! ))))

ЗЫ: У всех производителей процессоров это в открытом доступе, иначе бы под них никто не стал бы писать софт - как его писать без документации?

(1) В публикации неточное введение. Поэтому если прочитать только его (первые два предложения), то формируется оценка типа "аттракцион".
На самом деле по указанной ссылке расположено нечто большее: руководство по эффективному программированию на платформе «Эльбрус».
А описание системы команд занимает в нём только одну главу из 10.

На сайте Интела и AMD даже компиляторы для С/С++ свои выложены и очень много документации об оптимизации. Плюс библиотеки с оптимизированной математикой.

Создатели Эльбруса что-то втирали на счет того, что если все правильно написать, то компилятор может из этого сделать хорошо распаралелленый код, но мы то знаем, что не все в этом мире хорошо параллелится. Более того, распараллелится все по количеству ядер. Что там может быстрее работать, чем на других процессорах с более высокой частотой и IPC? Ну только если воткнули пару команд для шифрования ГОСТ - так это аппаратная штука, а не программная.

Ну ладно, давайте посмотрим руководство.

1. Работа с платформой.

Ну тут ассемблер и дизасемблер элементарных функций на С++ с указанием номера такта выполнения и механикой оптимизации. Так-то прикольно: в системе куча наборов регистров - 16 общих, 16 глобальных и 16 специальных.Регистров мало не бывает - это точно. Ну и оптимизация адресным выравниванием и помещение "широкой" команды в конвейер для однотактового (суперскалярного параллельного) выполнения. Что-то ноу-хау я тут не вижу - все процы давно уже так делают, а еще предсказывают ветвление и прочие штуки, иногда играющие плохую шутку с возможностью вытащить пару чужих байт (уязвимости типа спектра spectre). В общем -О0 .. -О4 - тоже нового ничего нет.
Ну или вот, банальное:

Обратите внимание, что в результате оптимизаций в режиме -O3 вызов был заменён на:

И что было заменено? Вызов процедуры на инлайн-код. Тоже ничего нового - это все было в самых древних компиляторах, полагаю.

В принципе эти все "широкие команды" - это основной признак архитектуры АРМ, суть которой была в том, что ну очень много команд на все случаи жизни? прибавил и перешел, умножил и перешел, если в результате больше/меньше/равно. Предположу, что ноги оттуда растут, но за дополнительные регистры - да, спасибо, полезно иногда.

2. Повышение производительности.

Один из известных ресурсов повышения производительности - выявление и использование параллелизма на уровне элементарных операций (устоявшийся термин ILP = Instruction-Level Parallelism).
Для АПП «Эльбрус» параллелизм выражается в машинном коде явным образом в виде Широких Команд (ШК), а задача обнаружения и эффективного использования ILP возлагается на компилятор
- этот принцип характерен для всех известных процессоров VLIW VLIW также получила хорошее распространение на рынке GPU, так, видеопроцессоры AMD/ATI Radeon начиная с R600 и до Northern Islands включительно имеют VLIW-архитектуру.[8][9] Начиная с Southern Islands (первый квартал 2012) компания AMD/ATI отошла от подхода VLIW[10]

Т.е. тут у нас очень широкие команды, которые упаковываются в один процессорный такт, если не работают с памятью, которую придется ждать (если не в кеше). Но на сколько они щироки? Большинство современных процессоров суперскалярны и умеют любой код таким образом параллелить, есть такая штука, как SMT(АМД) - симуляция многопоточности на одном ядре. У Интела это называется Hyper Threading. Технология реализует на конвейере одного ядра одновременно выполняются команд разных потоков, сгруппированных специальным сложным аппаратным механизмом процессора. Для Эльбруса компилятор произведет такую оптимизацию и в некоторых случаях создаст "широкую команду", которая за такт пару-тройку инструкций, сгруппированных в этой команде, выполнит. В общем обычный софт будет работать на Эльбрусе долго и упорно, т.к. процессор неспособен ни ветвления предсказать, ни команды как-то иначе, чем это сделано в момент генерации машинного кода, сгруппировать. Именно по-этому от данной технологии в самых современных архитектурах давно отказались, т.к. сложно всем угодить и иметь в пакете код, оптимизированный для разных процессоров - пусть процессор сам его поймет и максимально хорошо выполнит.

Дальше там дана интересная таблица задержек на операциях с целыми и вещественными числами (не маленькая), выборки данных из кеша 1-3-го уровня (до 40 тактов) и чтения из памяти (в районе 100 тактов, что на 400-800 МГц весьма и весьма долго). Как я понял, никакого спекулятивного чтения из памяти, никакого предсказания ветвлений в этом процессоре нет. Все, что компилятор не оптимизирует, будет выполняться не быстро.

Основное, что нужно понять здесь, так это то, что такое этот пресловутый параллелизм. А это просто группировка команд для быстрого выполнения в широкую команду. Это та самая суперскалярность. Но если современные процессоры Intel и AMD умеют динамически перестраивать инструкции х86 в оптимальную последовательность одновременного выполнения, то Эльбрус тут без оптимизирующей компиляции "даст маху", ибо неспособен ни на что подобное. Ну и при частоте в 10 раз медленнее конкурентов даже четыре инструкции за такт будет выполняться в два с половиной раза дольше, чем одна инструкция за такт вообще никак не оптимизированного кода на Intel или AMD.

Читайте также: