10 pontos por GN⁺ 2025-03-24 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2025-03-24
Comentários do Hacker News
  • "Acredito que dois fatores principais atrapalham isso"

    • orientação para revestir opiniões com aparência científica
    • a experiência de trabalhar no processador Cell exigiu muita microgestão
    • sistemas modernos são projetados levando em conta proteção de memória, isolamento e estabilidade
    • fazer alguém escrever código em um Amiga geraria uma nova apreciação
  • O modelo de programação é ineficiente em 2025

    • é preciso compilar o código-fonte/bytecode de shader em tempo de execução
    • é difícil manipular estruturas de dados entre CPU e GPU em sistemas NUMA/discretos
    • é necessário sincronizar o acesso a dados entre CPU-GPU e entre tarefas da GPU
    • é preciso lidar com APIs confusas por causa de hardware não padronizado
    • é necessário lidar com combinações de diferentes configurações
  • experiência de trabalhar em uma empresa que "colocou centenas de pequenas CPUs em um único chip"

    • o modelo de programação é estranho demais, então fracassará
    • a próxima geração será uma GPU com recursos adicionais, não uma nova arquitetura
  • GPUs são de 10 a 100 vezes mais poderosas que CPUs

    • muitas tarefas não precisam de mais desempenho
    • interfaces gráficas já reagem à entrada do usuário há mais de 20 anos
    • é preciso simplificar a programação para GPU
  • opinião sobre a construção de um supercomputador com M4 Mac mini

    • engenharia reversa do conjunto de instruções da GPU e do Neural Engine do Apple M3 Ultra
    • pode realizar mais de 50 trilhões de operações por segundo
  • problemas dos computadores paralelos

    • muitas pessoas precisam adotar o dispositivo para fins de desenvolvimento
    • portar código da CPU para a GPU é um grande trabalho
    • AMD e outras empresas estão explorando a ideia de aproximar mais a GPU da CPU
  • não está claro por que um renderizador 2D precisa de GPU

    • renderizadores 3D precisam de ajuda
    • Vulkan fica em um nível abaixo do renderizador
    • há pontos de atrito no projeto de renderizadores em Rust 3D
  • há muitas menções ao Larabee, mas nenhuma ao Xeon Phis

    • o design de CPUs está se dividindo entre otimizar desempenho de núcleo único e eficiência energética
    • se houver mais núcleos E, algoritmos que aproveitam paralelismo podem vencer
  • os sacrifícios que possibilitam o alto throughput da GPU

    • há o sistema de memória unificada do Apple Silicon
    • as APIs de programação de GPU tratam a memória como se não fosse unificada