Анна Ладилова, к.ф.-м.н., руководитель отдела DevOps, C3D Labs, рассказывает о разнообразных аппаратных платформах, поддерживаемых ядром С3D.
В начале своей работы, с момента основания компании C3D Labs в 2012 году, геометрическое ядро C3D поддерживало исключительно архитектуры x86 и x64. Это было естественным решением — фокус смещался на классические архитектуры, наиболее востребованные в тот момент. Однако со временем область поддержки значительно расширилась. Одним из направлений развития стала адаптация под архитектуру ARM, что включало и реализацию для платформы «Байкал».
Поддержка «Байкала» не потребовала серьезных усилий. В рамках расширения стека архитектур ARM платформа была успешно освоена, но после выполнения первичного запроса активное развитие в этом направлении не продолжилось. Ядро было собрано также для различных операционных систем, включая macOS и Android, что обеспечило базовую поддержку ARM на регулярной основе.
С архитектурой «Эльбрус» ситуация оказалась значительно более сложной. Запрос на поддержку этой платформы поступил в 2022 г. Архитектура оказалась самобытной и не имела аналогов, в том числе из-за использования специальных процессорных инструкций и собственного компилятора LCC. Работа велась на системе с операционной системой Elbrus Linux, и адаптация потребовала доработок кода геометрического ядра. Возникли трудности с поддержкой OpenMP, которые были успешно преодолены. Тем не менее достичь полной производительности, сопоставимой с классическими архитектурами, не удалось.
Проект был завершен: геометрическое ядро собрано, протестировано, работоспособность подтверждена. Однако после выполнения запроса дальнейших действий не последовало, и работа по «Эльбрусу» была приостановлена. Периодически выполняются проверки компилируемости и стабильности, чтобы убедиться в сохранении функциональности.
До прошлого года задач, связанных с поддержкой платформы «Эльбрус», у нас не было. Однако затем ситуация изменилась: поступило сразу несколько запросов, причем требования оказались более жесткими — требовалась не просто библиотека, а библиотека с оберткой для C#. Это заметно усложнило задачу.
Если само геометрическое ядро C3D мы могли скомпилировать под «Эльбрус» без принципиальных проблем, то для интеграции с C# потребовались дополнительные шаги. Сначала был написан CWrapper — промежуточный слой на языке C. Затем на его основе и с использованием сторонней библиотеки CPPSharp была собрана обертка для C#. Помимо сборки собственных компонентов, нам пришлось адаптировать и саму библиотеку CPPSharp под «Эльбрус» (рис. 1). Основной метод — кросс-компиляция: сборка на x86_64 с целевой системой e2k.
Эту задачу мы успешно решили, но по ходу столкнулись с рядом трудностей. Одна из них — несовместимость версий компилятора LCC. Наша библиотека была собрана с версией 1.25, а заказчики использовали 1.27, и на этой версии приложение падало. Обновление устранило проблему, но сам факт вызвал вопросы. Возникали и сомнения по поводу поддержки стандарта C++17: компилятор LCC 1.27 соответствует примерно GCC 9 и гарантированно поддерживает только C++14, однако в нашем случае весь используемый код оказался совместимым. Тесты пройдены, заказчик доволен, но мы понимаем, что впереди остаются нерешенные вопросы с производительностью.
В 2024 г. появился новый запрос — на поддержку процессоров Loongson. Машина с архитектурой LoongArch работала под Alt Linux. Здесь особых трудностей не возникло: компилятор Clang версии 18 и выше поддерживает эту платформу, и сборка по кросс-схеме прошла успешно. Задача еще не завершена, но в целом все работает стабильно, и никаких принципиальных препятствий на данный момент нет.
Мы начали с того, что выполняли сборки под «Эльбрус» по запросу: проверяли, что все работает, и откладывали эту задачу до следующего раза. Теперь стало понятно, что поддержка этой архитектуры необходима на постоянной основе. Отдельные сборки больше не соответствуют новым требованиям. В результате мы модернизируем нашу систему CI: теперь она будет включать сборки под «Эльбрус» и Loongson в штатном режиме. Эти сборки будут выполняться регулярно и предоставляться нашим заказчикам.

Анна Ладилова,
Руководитель отдела DevOps, к.ф.-м.н.
C3D Labs





