- A GPU é 10 a 100 vezes mais poderosa que a CPU, mas tem dificuldade para lidar com tarefas dinâmicas e faltam ferramentas de programação paralela, por isso não consegue aproveitar totalmente o desempenho em tarefas gerais
- No passado, houve designs de computadores paralelos como Connection Machine, Cell e Larrabee, mas eles fracassaram por causa da complexidade do modelo de programação, entre outros fatores
- As GPUs modernas são difíceis de otimizar por causa de problemas de gerenciamento de memória e de um modelo de execução complexo, sendo necessária uma estrutura eficiente de entrega de dados baseada em filas
- Novas arquiteturas, como aceleradores de IA e conjuntos de núcleos paralelos, podem superar as limitações das GPUs
- A evolução dos computadores paralelos ainda está incompleta, e são necessários um modelo de execução simples e eficiente e melhores ferramentas de programação
O forte desempenho e os limites da GPU
- A GPU é cerca de 10 a 100 vezes mais poderosa que a CPU (dependendo do tipo de tarefa)
- Esse desempenho está sendo bem aproveitado em renderização gráfica em tempo real e em machine learning
- No entanto, o desempenho da GPU não está sendo plenamente aproveitado em tarefas gerais
As causas das limitações da GPU
- Modelo de execução fraco
- A GPU é forte em grandes volumes de dados previsíveis (ex.: multiplicação de matrizes densas), mas tem desempenho inferior em tarefas dinâmicas
- Falta de linguagens e ferramentas
- Programar computadores paralelos por si só é muito difícil
Aumento da complexidade
- As GPUs mais recentes estão com a complexidade crescendo rapidamente
- Novos recursos como mesh shaders e work graphs foram introduzidos, mas algumas tarefas básicas ainda continuam sem suporte
O problema da eficiência de memória complexa nas GPUs
- O autor está desenvolvendo um renderizador vetorial 2D avançado chamado Vello
- A CPU faz upload da descrição da cena (em formato SVG) → o compute shader processa → a imagem é gerada
- Problema: dificuldade no gerenciamento de memória
- É difícil prever o tamanho do buffer para armazenar resultados intermediários
- Quando o buffer estoura, a operação de leitura da GPU para a CPU provoca perda de desempenho
Proposta de solução
- Melhorar o fluxo para que os resultados sejam repassados por meio de filas (queue) dentro da própria GPU
Designs de computadores paralelos do passado
-
Connection Machine (1985)
- Computador paralelo com 64k processadores conectados por uma rede hipercubo
- Cada processador tinha baixo desempenho, mas era possível executar trabalho paralelo em larga escala
- Grande contribuição para a pesquisa de algoritmos paralelos
-
Cell (2006, PS3)
- Computador paralelo incluído no PS3 (cerca de 87,4 milhões de unidades enviadas)
- 8 núcleos paralelos podiam executar operações de forma independente
- A complexidade do modelo de programação foi a causa do fracasso
-
Larrabee (2008)
- Desenvolvido como um computador paralelo baseado em x86
- Motivos do fracasso: consumo de energia e falta de suporte de software
- Depois deu origem ao Xeon Phi e às instruções AVX-512
Mudança nas cargas de trabalho
- Mesmo em jogos, a fatia de trabalho computacional está aumentando
- No caso de Starfield, cerca de 50% do tempo total de trabalho é computação
- O renderizador Nanite também trata a rasterização de pequenos triângulos como computação
Caminhos para o futuro
-
1. Expansão de conjuntos de núcleos (renascimento do Cell)
- CPUs avançadas modernas incluem mais de 100 bilhões de transistores
- É possível fabricar chips com centenas ou milhares de núcleos RISC simples e de baixo consumo
- Aceleradores de IA já adotam arquiteturas semelhantes
-
2. Execução de comandos Vulkan na GPU
- Suporte para permitir a execução direta de comandos Vulkan na GPU
- Hoje isso já foi implementado de forma limitada em algumas extensões do Vulkan
-
3. Work Graph
- O programa é composto por nós (kernels) e arestas (filas)
- Executa em paralelo, mas há limitações como
- operações de join difíceis
- ausência de garantia da ordem de classificação dos elementos
- ausência de suporte a elementos de tamanho variável
-
4. Evolução por fusão com a CPU
- Há possibilidade de designs de CPU de alto desempenho se tornarem otimizados para processamento paralelo
- O desempenho em computação paralela e em SIMD (single instruction, multiple data) está melhorando
-
5. O hardware talvez já esteja pronto
- Algumas GPUs incluem processadores de comando capazes de executar código do usuário
- Se os processadores de comando forem totalmente abertos, pode haver ganhos de desempenho
O problema da complexidade
- A arquitetura da GPU é complexa demais
- Mistura computador paralelo + hardware especializado + estrutura de processamento de comandos
- Problemas de compatibilidade entre várias APIs e drivers
- Em contrapartida, a CPU continua evoluindo em desempenho com base em um conjunto de instruções simples
Conclusão
- A evolução dos computadores paralelos ainda está incompleta
- Para que a GPU seja otimizada para tarefas gerais além de gráficos e IA, é necessário
- um modelo de execução simples
- facilidade de programação
- baixo consumo de energia
- Será possível aproveitar plenamente o desempenho dos computadores paralelos em trabalhos como renderizadores 2D avançados como o Vello
- É necessária uma nova arquitetura de computador paralelo para superar os limites de desempenho da GPU
1 comentários
Comentários do Hacker News
"Acredito que dois fatores principais atrapalham isso"
O modelo de programação é ineficiente em 2025
experiência de trabalhar em uma empresa que "colocou centenas de pequenas CPUs em um único chip"
GPUs são de 10 a 100 vezes mais poderosas que CPUs
opinião sobre a construção de um supercomputador com M4 Mac mini
problemas dos computadores paralelos
não está claro por que um renderizador 2D precisa de GPU
há muitas menções ao Larabee, mas nenhuma ao Xeon Phis
os sacrifícios que possibilitam o alto throughput da GPU