- Biblioteca leve que permite computação GPU de uso geral de forma simples em C++
- Usa a especificação WebGPU para fornecer uma interface GPU de baixo nível, permitindo escrever código que pode rodar em várias GPUs
- Em outras palavras, torna possível inserir código GPU em projetos C++ para executá-lo em GPUs da Nvidia, Intel, AMD e outras, aproveitando GPU com o mesmo código C++ na maior parte do hardware compatível com Vulkan, Metal e DirectX
Objetivos técnicos: leveza, iteração rápida no desenvolvimento e pouco código boilerplate
- O objetivo é cobrir todo o necessário para computação GPU com uma API mínima
- O build do projeto acontece quase instantaneamente, buscando um ciclo de compilar/executar inferior a 5 segundos
- Minimiza dependências e a carga de tooling além de um compilador C++ padrão
- Busca uma superfície de API pequena e o mínimo de código boilerplate, com o menor número possível de camadas de abstração para que o mapeamento entre a biblioteca gpu.cpp e a API WebGPU seja claro
- Reduz o tempo de compilação ao fornecer binários pre-built da implementação WebGPU Dawn, do Google
- Atualmente, só o backend Dawn é suportado, mas há planos de oferecer suporte a outras implementações de WebGPU no futuro
Usuários-alvo do gpu.cpp
- O foco principal são projetos que precisam de computação GPU altamente portátil em dispositivos de computação pessoal
- Pode ser usado em desenvolvimento de algoritmos para GPU, implementação direta de modelos de redes neurais, simulação física, aplicações multimodais, renderização gráfica offline e motores de inferência de aprendizado de máquina
- O objetivo é facilitar computação GPU ampla em dispositivos pessoais
- Permite controlar diretamente a movimentação detalhada de dados e o código GPU
O que gpu.cpp não é
- Não é um framework de computação numérica de alto nível, nem um framework de aprendizado de máquina ou motor de inferência (embora possa ser usado para dar suporte a esse tipo de implementação)
- É importante notar que o WebGPU não existe apenas em navegadores, mas também em implementações nativas ("WebGPU is Not Just About the Web")
- O foco está em computação GPU de uso geral, mais do que em rendering/gráficos
Limitações e planos futuros
- Melhoria da API: o design da API deve evoluir a partir de casos de uso reais
- Há planos para oferecer suporte a targets de navegador
- Transformar kernels reutilizáveis em bibliotecas, assim como shaders
- Adicionar mais exemplos de uso e testes
- Um dos objetivos de curto prazo é implementar os kernels de llm.c em WebGPU
1 comentários
A apresentação do projeto está descrita com mais detalhes nesta página sobre
gpu.cpp: portable GPU compute for C++ with WebGPU.