La nueva implementación de OpenCL (rusticl), escrita en Rust, que se está desarrollando para el proyecto Mesa, pasó con éxito el conjunto de pruebas CTS (Kronos Conformance Test Suite) utilizado por el consorcio Khronos para evaluar la compatibilidad con las especificaciones OpenCL 3.0. El proyecto está siendo desarrollado por Karol Herbst de Red Hat, quien participa en el desarrollo de Mesa, el controlador Nouveau y la pila abierta OpenCL. Cabe señalar que Carol se comunicó con Khronos con respecto a la certificación oficial de soporte de OpenCL 3.0 en rusticl.
Las pruebas se completaron en un sistema con una GPU Intel de 12.ª generación (Alder Lake). El trabajo se llevó a cabo utilizando el controlador Mesa Iris, pero el proyecto también debería funcionar con otros controladores Mesa que utilizan la representación intermedia sin tipo (IR) de sombreadores NIR. La solicitud para fusionar Rusticle con Mesa aún está bajo revisión y no se ha tomado ninguna decisión sobre si incluir el código Rust en Mesa. Antes de que Rusticl sea aceptado en la composición principal de Mesa, puede usar una rama separada para la compilación, al compilar debe especificar los parámetros de compilación “-Dgallium-rusticl=true -Dopencl-spirv=true -Dshader-cache=true -Dllvm= verdadero".
Rusticle actúa como un análogo de la interfaz OpenCL de Mesa, Clover, y también se desarrolla utilizando la interfaz Gallium proporcionada en Mesa. La participación de Clover lleva mucho tiempo abandonada y Rusticl se posiciona como su futuro sustituto. Además de lograr compatibilidad con OpenCL 3.0, el proyecto Rusticle se diferencia de Clover en que admite extensiones OpenCL para el procesamiento de imágenes, pero aún no es compatible con el formato FP16.
Rusticl utiliza rust-bindgen para generar enlaces para Mesa y OpenCL, lo que permite llamar a funciones de Rust desde código C y viceversa. La posibilidad de usar el lenguaje Rust en el proyecto Mesa se ha estado discutiendo desde 2020. Entre las ventajas de admitir Rust se encuentran una mayor seguridad y calidad de los controladores debido a la eliminación de problemas comunes de memoria, así como la capacidad de incorporar desarrollos de terceros en Mesa, como Kazan (una implementación de Vulkan en Rust). Las desventajas incluyen una mayor complejidad del sistema de compilación, una reticencia a integrarse con el sistema de empaquetado Cargo, mayores requisitos del entorno de compilación y la necesidad de incluir el compilador de Rust en las dependencias de compilación necesarias para compilar componentes clave del escritorio. Linux.
Fuente: opennet.ru
