Наша компания занимается компиляторами и виртуальными машинами с самого своего основания, а это ни много ни мало более четверти века! Нашему опыту в этой сфере доверяют самые известные ИТ-корпорации.
Мы разрабатываем оптимизирующие компиляторы, среды исполнения и бэкенды для различных архитектур общего и специального назначения. Под нужды наших заказчиков, мы выполнили ряд проектов по статическим компиляторам с языков программирования С, С++, Fortran и специализированных диалектов. Мы делаем также свою открытую реализацию ВМ Java на базе LLVM - проект Alhambra.
Нами накоплен большой опыт в разработке и переносе на новые архитектуры высокоэффективных виртуальных машин для исполнения современных динамических языков, включая Java, C#, JavaScript. Мы проводим дополнительные исследования критических сценариев заказчиков и предлагаем решения по оптимизации узких мест.
Примеры наших разработок, успешно запущенных в промышленную эксплуатацию:
Нами разработан полный набор инструментов SDK (оптимизирующий компилятор для диалекта языка С, ассемблер, дизассемблер, отладчик), на базе фреймворка LLVM+clang. Разработка начиналась с LLVM4, в настоящий момент проект обновлен до LLVM12.
Кодогенератор компилятора поддерживает 5 поколений архитектуры с существенно разными кодировками. Реализован необходимый набор машинно-зависимых оптимизаций (machine loop transformation, loop unrolling & software pipelining, if-conversion, instruction scheduler и т.д.), позволяющий добиться высокой плотности кода и достойной производительности. Поддерживается обширная (3000+ методов) библиотека векторных интринсиков (как на языке высокого уровня, так и на внутреннем представлении LLVM IR), разработан ряд высокоуровневых оптимизаций над такими интринсиками.
Модульная архитектура LLVM позволила задействовать наш кодогенератор для создания компиляторов с других языков, в том числе проекта MLIR. Начата работа над механизмом универсальной рекомпиляции под будущие поколения архитектуры в момент исполнения.
В результате нашей многолетней совместной работы с МЦСТ российские процессоры «Эльбрус» имеют поддержку основных современных языков программирования, распространённых во всём мире. Наша команда строит надежные системные продукты на основе популярных программных решений и оригинальных компонентов собственной разработки. Так, например, процесс генерации кода вынесен в библиотеку Tango, которая используется для реализации разных языковых платформ.
Далее приводится описание проектов, связанных с разработкой на платформе «Эльбрус».
Виртуальная машина Java RVM (Russian Virtual Machine) реализована на основе виртуальной машины OpenJDK с открытым исходным кодом, за 10 лет работы над проектом нами были в полном объёме поддержаны версии OpenJDK 6, 8 и 11 для платформы «Эльбрус». RVM полностью совместима со спецификациями J2SE от Oracle.
Разработанный компилятор «на лету» оптимизирован под платформу «Эльбрус», что позволило достигнуть производительности, сопоставимой с производительностью на аналогичных процессорах Intel.
Процесс генерации кода был вынесен в библиотеку Tango, которая может далее использоваться для реализации других языковых платформ.
В данный момент ведутся работы по поддержке версий 8 и 11 и дальнейшему улучшению производительности.
На платформу «Эльбрус» портировано 2 среды исполнения языка JavaScript.
Разработанный обработчик скриптов ("движок") SpiderMonkey встроен в браузер Mozilla Firefox, входящий в состав операционной системы «Эльбрус».
Обработчик скриптов v8 успешно встроен в платформу node .JS, преимущественно используемую в качестве веб-сервера.
Ведутся работы по доработке JIT-компиляторов сред SpiderMonkey и v8 и улучшению производительности.
За основу первой реализации языка C# на платформе «Эльбрус» был взят проект Mono, имеющий совместимый с .NET SDK набор инструментов. В результате был выпущен релиз Mono с поддержкой версии 3.2, позже - релиза 4.5, а сейчас уже версии 6.12.
Следом началось портирование платформы .NET SDK. В начале 2022 г выпущен первый релиз платформы .NET Сore 3.1 на «Эльбрус». Начаты работы над версией .NET 6.
Обе реализации переданы корпоративным пользователям для тестирования их приложений. Команда «УНИПРО» осуществляет техническую поддержку пользователей. Непрерывно ведутся работы по улучшению стабильности и производительности.
В основу реализации легла виртуальная машина DRLVM из проекта Apache Harmony. Был разработан универсальный интерфейс для сопряжения ВМ с библиотеками классов, позволяющий выбирать из нескольких реализаций библиотек (Apache Harmony, OpenJDK), доработаны "ядерные" пакеты классов этих библиотек, обеспечена сертификация JCK в полном объёме стандарта JavaSE версий 6 и 7.
Сама виртуальная машина была существенно доработана: исправлено большое кол-во ошибок (особенно в области многопоточности), улучшена стабильность и производительность всех компонент рантайма, включая подсистемы загрузки и верификации классов, сборки мусора, профилирования и версионирования JIT-скомпилированного кода. Произведена трансплантация мусорщика G1 из OpenJDK HotspotVM. Обеспечена поддержка легковесной контейнеризации независимых Java-приложений в одном процессе ВМ. Наиболее объемным доработкам подвергся оптимизирующий JIT компилятор, был добавлен ряд новых высокоуровневых оптимизаций (escape-анализ, class-hierachy анализ, строковые оптимизации, интринсики для криптографии, математики, обработки XML и др.) и доработаны имеющиеся, улучшен кодогенератор x86_64. Вся совокупность усилий позволила догнать по производительности основных конкурентов (OpenJDK Hotspot, IBM J9) и даже опередить их на отдельных бенчмарках.
В период работ с компанией Sun Microsystem "УНИПРО" выполнило реализацию интервального типа данных для компилятора с языка Фортран. Данная реализация была встроена в штатный компилятор, поставляемый Sun Microsystem, и обеспечивала полноценное включение в компилятор нового типа INTERVAL, с полной поддержкой всех операций над интервальными переменными, соответствующими встроенными функциями и интринсиками. Также были разработаны несколько библиотечных функций, использующих этот тип, такие как получение гарантированного решения нелинейных уравнений и глобальная оптимизация нелинейных функций.