O Rusticl, um driver OpenCL escrito em Rust e desenvolvido por Karol Herbst, engenheiro da Red Hat, recebeu recentemente melhorias importantes. Entre elas, está o suporte para variantes de shaders e a introdução de uma versão otimizada do kernel. Essas alterações visam melhorar o desempenho de forma significativa, especialmente ao processar pequenos programas, conhecidos como kernels, que rodam em placas de vídeo (GPUs).
Para entender melhor, OpenCL (Open Computing Language) é uma plataforma que permite que programas utilizem GPUs para acelerar cálculos. Ao invés de usar apenas o processador principal (CPU), o OpenCL distribui tarefas complexas para a GPU, que consegue processar várias coisas ao mesmo tempo de maneira muito mais rápida. Já o Rust é uma linguagem de programação moderna, conhecida por ser rápida e segura, usada na criação de software de alto desempenho como o Rusticl.
No pedido de merge para integrar essas melhorias ao código do Rusticl, Karol Herbst explicou a funcionalidade das variantes de shaders:
“Essa era uma funcionalidade que eu queria implementar há algum tempo. Agora, podemos compilar diferentes versões de shaders (pequenos programas que rodam na GPU) para otimizar a performance, principalmente em casos onde algumas condições simplificam o trabalho, como quando os offsets (ajustes) são zero. Isso elimina a necessidade de realizar operações desnecessárias.”
Resumindo, essa nova função permite ao driver compilar versões diferentes de código para a GPU, levando em conta determinadas situações. Quando certas condições estão presentes (como o fato de não precisar de ajustes), a versão otimizada do shader pode rodar muito mais rápido.
Herbst também explicou no commit sobre o kernel otimizado:
“Por padrão, precisamos prever que a aplicação pode configurar diferentes ajustes ou que uma execução de kernel pode não ser suficiente para o hardware realizar todo o trabalho de uma vez. Para reduzir a sobrecarga (processamento extra) gerada no tempo de execução do kernel, compilamos um kernel otimizado, com algumas suposições. Também aproveitamos a dica do tamanho de grupo de trabalho (workgroup_size_hint
) como uma otimização adicional. Isso deve acelerar significativamente kernels relativamente pequenos, reduzindo pela metade a quantidade de instruções executadas.”
Em termos mais simples, Herbst está dizendo que as novas melhorias permitem ao driver rodar certos programas (kernels) de forma mais eficiente. Isso é possível ao “adivinhar” algumas situações comuns, eliminando processamento desnecessário e economizando recursos.
Embora ainda não tenham sido divulgados números de desempenho concretos, espera-se que essas melhorias nas variantes de shaders tragam avanços consideráveis para o Rusticl, que é um driver open-source (código aberto) e compatível com várias marcas de hardware. Essas novidades serão lançadas como parte da próxima versão do Mesa 24.3, um componente essencial para o funcionamento de drivers gráficos no Linux, prevista para o próximo trimestre.
Herbst também mencionou que planeja realizar testes de desempenho mais detalhados (benchmarks) para avaliar os benefícios das otimizações introduzidas.