- Biblioteca ligera que permite realizar cómputo GPU de propósito general de forma sencilla en C++
- Proporciona una interfaz GPU de bajo nivel usando la especificación WebGPU, lo que permite escribir código que puede ejecutarse en distintas GPU
- Es decir, permite insertar código GPU en proyectos de C++ para ejecutarlo en GPU de Nvidia, Intel, AMD y otras, y aprovechar la GPU con el mismo código C++ en la mayoría del hardware compatible con Vulkan, Metal y DirectX
Objetivos técnicos: ligereza, iteración rápida de desarrollo y poco código boilerplate
- El objetivo es cubrir todo lo necesario para cómputo GPU con una API mínima
- Busca que la compilación del proyecto ocurra casi de inmediato y que el ciclo de compilar/ejecutar sea de menos de 5 segundos
- Minimiza las dependencias y la carga de tooling más allá de un compilador estándar de C++
- Apunta a una superficie de API pequeña y a la mínima cantidad de código boilerplate, con capas de abstracción reducidas para que el mapeo entre la biblioteca gpu.cpp y la API de WebGPU sea claro
- Reduce el tiempo de compilación al ofrecer binarios precompilados de Dawn, la implementación de WebGPU de Google
- Actualmente solo soporta el backend de Dawn, pero más adelante planea soportar otras implementaciones de WebGPU
Usuarios objetivo de gpu.cpp
- Está dirigido principalmente a proyectos que necesitan cómputo GPU portable en dispositivos de computación personal
- Puede usarse para desarrollo de algoritmos GPU, implementación directa de modelos de redes neuronales, simulación física, aplicaciones multimodales, renderizado gráfico offline y motores de inferencia de machine learning
- Su objetivo es facilitar el cómputo GPU de amplio alcance en dispositivos personales
- Permite controlar directamente el movimiento detallado de datos y el código GPU
Lo que gpu.cpp no es
- No es un framework de cómputo numérico o machine learning de alto nivel, ni un motor de inferencia (aunque puede usarse para apoyar ese tipo de implementaciones)
- Es importante que WebGPU no existe solo en navegadores web, sino también en implementaciones nativas ("WebGPU is Not Just About the Web")
- Está enfocado en cómputo GPU de propósito general más que en rendering/gráficos
Limitaciones y planes futuros
- Mejoras de API: planean seguir evolucionando el diseño de la API a partir de casos de uso
- Planean soporte para targets de navegador
- Convertir kernels reutilizables y shaders en bibliotecas
- Agregar más ejemplos de uso y pruebas
- Uno de los objetivos de corto plazo es implementar en WebGPU los kernels de llm.c
1 comentarios
La introducción del proyecto está explicada con un poco más de detalle por este lado en gpu.cpp: portable GPU compute for C++ with WebGPU.