7 puntos por GN⁺ 2025-04-28 | Aún no hay comentarios. | Compartir por WhatsApp
  • CubeCL es una extensión de lenguaje multiplataforma y de alto rendimiento que permite escribir kernels de GPU en Rust
  • Ofrece soporte completo para funciones, genéricos y structs, y soporte parcial para traits, métodos e inferencia de tipos
  • Soporta runtimes basados en WGPU, CUDA y ROCm, y también está en desarrollo un runtime JIT para CPU optimizado con instrucciones SIMD
  • Proporciona vectorización automática, optimización en tiempo de compilación (Comptime) y autotuning para maximizar el rendimiento del código
  • Usa un enfoque único que aprovecha el sistema de macros procedimentales de Rust para analizar y expandir código de kernels de GPU

Introducción a CubeCL

  • CubeCL es una extensión del lenguaje Rust para escribir directamente kernels de GPU orientados a cómputo de alto rendimiento
  • Aprovecha abstracciones de costo cero para permitir un desarrollo de kernels eficiente y fácil de mantener
  • Actualmente ofrece soporte completo para funciones, genéricos y structs, y soporte parcial para traits, métodos e inferencia de tipos

Ejemplo simple de uso

  • Usa el atributo #[cube] para marcar funciones que se ejecutarán en la GPU
  • Las funciones gelu_array y gelu_scalar usan automáticamente instrucciones SIMD para mejorar el rendimiento
  • El kernel se puede ejecutar con la función launch_unchecked

Runtimes compatibles

  • WGPU: soporte GPU multiplataforma mediante Vulkan, Metal, DirectX y WebGPU
  • CUDA: soporte optimizado para GPU de NVIDIA
  • ROCm/HIP: soporte para GPU de AMD (en desarrollo)
  • Runtime JIT para CPU: se está desarrollando un runtime JIT para CPU, optimizado con instrucciones SIMD y basado en Cranelift

Objetivos de CubeCL

  • Permitir escribir kernels de cómputo de alto rendimiento sin depender de un hardware específico
  • Mejorar la componibilidad, reutilización, capacidad de prueba y mantenibilidad del código mediante vectorización automática, comptime y autoajuste
  • Proporcionar reutilización optimizada de buffers para alto rendimiento mediante estrategias de gestión de memoria
  • Desarrollar componentes de álgebra lineal para construir un ecosistema de cómputo científico y de alto rendimiento

Cómo funciona CubeCL

  • Usa un enfoque único que aprovecha el sistema de macros procedimentales de Rust para analizar y expandir el código de kernels de GPU
  • Comptime: permite integrar fácilmente optimizaciones en tiempo de compilación sin transformar el código fuente original
  • Vectorización automática: vectoriza las entradas de las funciones de CubeCL para determinar los elementos de vectorización de cada variable intermedia
  • Integración con Rust: el código generado sigue siendo código Rust válido y puede distribuirse en un bundle sin depender de un runtime específico

Diseño y funciones especiales

  • CubeCL está diseñado alrededor del concepto de cubos, y todas las APIs de cómputo pueden mapearse al hardware para usar una representación 3D
  • Vectorización automática: puede mejorar el rendimiento usando instrucciones SIMD, y se puede acceder directamente a los elementos de vectorización dentro del kernel
  • Comptime: modifica el IR del compilador en tiempo de ejecución para ofrecer optimización y flexibilidad
  • Autoajuste: ejecuta pequeños benchmarks en tiempo de ejecución para elegir el kernel y la configuración óptimos

Consideraciones e historia

  • CubeCL se encuentra actualmente en versión alfa, por lo que aún tiene partes sin pulir
  • Originalmente comenzó como el backend de WebGPU del proyecto Burn
  • Luego se expandió con la adición del runtime de CUDA hacia un IR general y un frontend en Rust
  • Se desarrollaron conceptos generales para superar las diferencias entre CUDA y WebGPU

Aún no hay comentarios.

Aún no hay comentarios.