La implementación OpenCL de Mesa escrita en rust ya supero las pruebas CTS
La nueva implementación de OpenCL (rusticl) desarrollada para el proyecto Mesa, escrita en Rust, ha superado con éxito las pruebas CTS (Kronos Conformance Test Suite) utilizadas por el consorcio Khronos para evaluar la compatibilidad con las especificaciones de OpenCL 3.0.
Para quienes desconocen de»Rusticl» deben saber que este se ha publicado como una nueva implementación de Mesa OpenCL escrita en el lenguaje de programación Rust.
Rusticl fue iniciado por el conocido colaborador de Mesa Karol Herbst de Red Hat quien comenzó como ingeniero del controlador de código abierto»Nouveau» de NVIDIA mientras estaba en Red Hat, y trabajó en el soporte informático Clover de Mesa y otros esfuerzos. Rusticl es un intento de Herbst de aprender el lenguaje de programación Rust y también de proporcionar una nueva (y con suerte superior) implementación de OpenCL.
Rusticl es mucho más moderno enfocado en OpenCL en comparación con el antiguo código Clover y es notable, sin embargo, es que Rusticl en este momento todavía no tiene soporte de imagen OpenCL que ha sido otro problema con Clover.
Rusticl confía en clc para compilar el código fuente de OpenCL en SPIR-V. Rusticl también depende de los controladores Mesa Gallium3D compatibles con NIR, pero todos los controladores principales ya lo hacen. Cabe señalar que Carol se puso en contacto con Khronos para obtener la certificación oficial de compatibilidad con OpenCL 3.0 en rusticl.
Y ahora, rusticl ha pasado con éxito las pruebas Kronos Conformance Test Suite para evaluar la compatibilidad con las especificaciones de OpenCL 3.0, asi lo anuncio en Twitter neil trevett:
Khronos se enorgullece de haber renunciado a todas las tarifas de adopción de MESA a lo largo de los años, y muchas implementaciones de MESA son oficialmente conformes. ¡Genial que OpenCL 3.0 de MESA esté pasando CTS! Infórmenos cuando MESA esté listo para ejecutar el Acuerdo de adopción de OCL 3.0 y podamos iniciar el proceso…
Las pruebas se realizaron en un sistema con GPU Intel de 12.ª generación (Alder Lake), con el cual el trabajo se realizó con el controlador Iris Mesa, pero se menciona que el proyecto debería funcionar con otros controladores Mesa que usen la representación intermedia (IR) sin tipo de los sombreadores NIR.
Rusticl actúa como una contraparte de la interfaz OpenCL Clover de Mesa y también se desarrolla utilizando la interfaz Gallium de Mesa. Clover lleva mucho tiempo en estado de abandono y rusticl se posiciona como su futuro reemplazo. Además de lograr la compatibilidad con OpenCL 3.0, el proyecto Rusticl se diferencia de Clover en que admite extensiones OpenCL para el procesamiento de imágenes , pero aún no admite el formato FP16.
Rusticl usa rust-bindgen para generar enlaces para Mesa y OpenCL que permiten llamar a las funciones de Rust desde el código C y viceversa.
La posibilidad de usar el lenguaje Rust en el proyecto Mesa se discute desde 2020. Entre las ventajas del soporte de Rust mencionan mejorar la seguridad y calidad de los drivers al eliminar problemas típicos cuando se trabaja con memoria, así como la posibilidad de incluir desarrollos de terceros en Mesa, como Kazan (una implementación de Vulkan en Óxido).
Entre las deficiencias, hay una complicación del sistema de compilación, la falta de voluntad para vincularse al sistema de paquetes de carga, un aumento en los requisitos para el entorno de compilación y la necesidad de incluir el compilador Rust en las dependencias de compilación que se requieren para construir componentes de escritorio clave en Linux.
Finalmente, se menciona que la solicitud para fusionar Rusticl con Mesa aún está pendiente y aún no se ha tomado una decisión sobre la inclusión del código de idioma Rust en Mesa, pero se espera que llegue en la versión de Mesa 22.2
Es por ello que antes de que Rusticl sea aceptado en la composición principal de Mesa, se puede usar una rama separada para construir, al compilar, debe especificar los parámetros de compilación «-Dgallium-rusticl=true -Dopencl-spirv=true -Dshader-cache=true -Dllvm =true».
Si estás interesado en poder conocer más al respecto sobre esta nueva especificación, puedes consultar los detalles en el siguiente enlace.