La nuova implementazione di OpenCL (rusticl), sviluppata per il progetto Mesa e realizzata in Rust, ha superato con successo un set di test CTS (Kronos Conformance Test Suite), utilizzati dal consorzio Khronos per valutare la compatibilità con le specifiche di OpenCL 3.0. Il progetto è guidato da Karol Herbst di Red Hat, che partecipa allo sviluppo di Mesa, del driver Nouveau e della piattaforma OpenCL. Si segnala che Karol ha contattato Khronos per l'ufficializzazione della certificazione del supporto a OpenCL 3.0 in rusticl.
I test sono stati eseguiti su un sistema con GPU Intel di 12a generazione (Alder Lake). L'attività è stata realizzata utilizzando il driver Mesa Iris, ma il progetto dovrebbe funzionare anche con altri driver Mesa che utilizzano rappresentazioni intermedie (IR) senza tipo per gli shader NIR. La richiesta di fusione di Rusticl con Mesa è attualmente in fase di revisione e non è ancora stata presa una decisione sull'inclusione del codice in Rust all'interno di Mesa. Fino all'accettazione di Rusticl nel ramo principale di Mesa, è possibile utilizzare un ramo separato per la compilazione, specificando i parametri di compilazione "-Dgallium-rusticl=true -Dopencl-spirv=true -Dshader-cache=true -Dllvm=true".
Rusticl funge da alternativa al front-end OpenCL presente in Mesa, Clover, ed è anch'esso sviluppato utilizzando l'interfaccia Gallium fornita in Mesa. Clover è stato trascurato da tempo e Rusticl si propone come il suo futuro sostituto. Oltre a raggiungere la compatibilità con OpenCL 3.0, il progetto Rusticl si distingue da Clover per il supporto delle estensioni OpenCL per l'elaborazione delle immagini, sebbene al momento non supporti il formato FP16.
Per generare i binding per Mesa e OpenCL, che consentono di chiamare funzioni Rust dal codice C e viceversa, Rusticl utilizza rust-bindgen. La possibilità di usare il linguaggio Rust nel progetto Mesa è in discussione dal 2020. Tra i vantaggi del supporto per Rust si citano un aumento della sicurezza e della qualità dei driver, grazie all'eliminazione di problemi comuni nella gestione della memoria, nonché la possibilità di integrare contribuzioni esterne nel progetto Mesa, come Kazan (implementazione di Vulkan in Rust). Tra gli svantaggi si segnala la complessità del sistema di build, la riluttanza a dipendere dal sistema di pacchetti cargo, l'ampliamento dei requisiti per l'ambiente di build e la necessità di includere il compilatore Rust tra le dipendenze di build, richieste per la costruzione dei componenti chiave dell'ambiente desktop in Linux.
Fonte: opennet.ru
