04.07.2022

В написанной на Rust реализации OpenCL для Mesa обеспечена поддержка OpenCL 3.0

Развиваемая для проекта Mesa новая реализация OpenCL (rusticl), написанная на языке Rust, успешно прошла набор тестов CTS (Kronos Conformance Test Suite), используемых консорциумом Khronos для оценки совместимости со спецификациями OpenCL 3.0. Проект развивает Кэрол Хербст (Karol Herbst) из компании Red Hat, принимающий участие в разработке Mesa, драйвера Nouveau и открытого стека OpenCL. Отмечается, что Кэрол связался с Khronos на предмет официальной сертификации поддержки OpenCL 3.0 в rusticl.

Тесты пройдены на системе с 12-поколением GPU Intel (Alder Lake). Работа проведена с использованием Mesa-драйвера Iris, но проект должен работать и с другими драйверами Mesa, использующими бестиповое промежуточное представление (IR) шейдеров NIR.
Запрос на слияние Rusticl с Mesa пока находится на стадии рассмотрения и решение о включении кода на языке Rust в Mesa пока не принято. До принятия Rusticl в основной состав Mesa для сборки можно использовать отдельную ветку, при компиляции которой следует указать сборочные параметры «-Dgallium-rusticl=true -Dopencl-spirv=true -Dshader-cache=true -Dllvm=true».

Rusticl выступает в роли аналога присутствующего в Mesa OpenCL-фронтэнда Clover и также разработан с использованием предоставляемого в Mesa интерфейса Gallium. Кол Clover уже давно находится в заброшенном состоянии и rusticl позиционируется как его будущая замена. Кроме достижения совместимости с OpenCL 3.0 проект Rusticl отличается от Clover поддержкой расширений OpenCL для обработки изображений, но пока не поддерживает формат FP16.

Для генерации биндингов для Mesa и OpenCL, позволяющих вызывать Rust-функции из кода на Си и наоборот, в Rusticl задействован rust-bindgen. Возможность использования языка Rust в проекте Mesa обсуждается с 2020 года. Из плюсов поддержки Rust упоминается повышение безопасности и качества драйверов за счёт избавления от типовых проблем при работе с памятью, а также возможность включения в состав Mesa сторонних наработок, таких как Kazan (реализация Vulkan на Rust). Из недостатков отмечается усложнение системы сборки, нежелание привязываться к пакетной системе cargo, расширение требований к сборочному окружению и необходимость включения компилятора Rust в сборочные зависимости, обязательные для построения ключевых компонентов рабочего стола в Linux.

Источник.