← Últimos artigos
💻 computer science

Concurrent Scheduling of High-Level Parallel Programs on Multi-GPU Systems

Este artigo introduz o escalonamento de grafos de instrução dentro do runtime Celerity para remover a análise complexa de memória e comunicação do caminho crítico para programas SYCL em sistemas multi-GPU, permitindo a execução concorrente e a alocação otimizada de memória que alcança escalonamento forte em até 128 GPUs.

Autores originais: Peter Thoman, Fabian Knorr, Philip Salzmann

Publicado 2026-09-14
📖 6 min de leitura🧠 Leitura aprofundada

Autores originais: Peter Thoman, Fabian Knorr, Philip Salzmann

Artigo original sob licença CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Os supercomputadores modernos já não são apenas versões mais rápidas das máquinas de algumas décadas atrás; são vastas coleções de milhares de processadores especializados trabalhando juntos. Para tirar o máximo proveito desses sistemas massivos, os cientistas dependem de softwares que possam decidir automaticamente qual parte de um cálculo vai para qual processador e como os dados se movem entre eles. Esta é uma tarefa difícil porque o software deve gerenciar a memória e a comunicação sem retardar o trabalho real. Se o sistema passar tempo demais tentando decidir onde colocar os dados ou como mantê-los consistentes, os poderosos processadores ficam ociosos, desperdiçando energia e tempo. O desafio é fazer essas decisões rápido o suficiente para que o computador nunca pare para pensar, mantendo o fluxo de trabalho tão suave quanto o fluxo de água em um rio.

Pesquisadores da Universidade de Innsbruck desenvolveram uma nova maneira de lidar com este problema de escalonamento para sistemas equipados com muitas unidades de processamento gráfico, ou GPUs. Esses chips são projetados para lidar com quantidades massivas de trabalho paralelo, mas coordenar centenas deles requer um gerente sofisticado. A equipe introduziu um método chamado escalonamento de grafo de instruções, que atua como um mapa detalhado e de baixo nível de cada operação individual que o computador precisa realizar. Em vez de tomar decisões conforme cada etapa é necessária, o sistema constrói um plano completo que inclui alocação de memória, transferências de dados e os cálculos reais. Este plano é gerado enquanto o computador já está trabalhando em tarefas anteriores, permitindo efetivamente que o escalonador antecipe os próximos passos sem interromper o fluxo atual.

O núcleo desta abordagem é uma mudança na forma como o software visualiza o trabalho. Anteriormente, o sistema gerava uma lista de alto nível de tarefas e então descobria os detalhes específicos, como a cópia de memória, apenas quando chegava a hora de executá-los. Isso frequentemente causava atrasos porque o sistema tinha que parar e analisar dependências no meio de um cálculo. O novo método decompõe cada tarefa em seus menores componentes, como alocar um bloco específico de memória ou enviar um pequeno pedaço de dado para um processador vizinho. Ao organizar esses pequenos passos em um único grafo interconectado, o sistema consegue ver exatamente quais passos podem ocorrer ao mesmo tempo. Isso permite que o computador sobreponha comunicação com cálculo, o que significa que os dados podem estar se movendo entre os processadores enquanto os chips estão ocupados processando números, em vez de esperar que um termine antes que o outro comece.

Para testar essa ideia, os pesquisadores integraram seu sistema em um framework de software chamado Celerity, que é projetado para rodar simulações complexas em clusters de GPUs. Eles executaram três aplicações científicas diferentes para ver o quão bem o novo escalonador se comportou em comparação com a versão padrão. Uma aplicação simulou a atração gravitacional entre bilhões de partículas, outra modelou como o som rebate em uma sala e a terceira rastreou como ondas se movem através de um meio. Em cada caso, eles mediram o quão rápido o programa rodava à medida que adicionavam mais GPUs, uma métrica conhecida como escalonamento forte (strong scaling). Os resultados mostraram que a nova abordagem superou consistentemente o sistema base, especialmente conforme o número de processadores crescia. Em um sistema com 128 GPUs, o novo escalonador permitiu que a aplicação de simulação de sala rodasse mais que duas vezes mais rápido que o método antigo, enquanto a simulação de partículas também viu um aumento significativo de velocidade.

Uma inovação fundamental neste trabalho é uma técnica chamada lookahead de escalonador, que resolve um problema específico relacionado ao uso de memória. Em muitas simulações, a quantidade de dados que um programa precisa armazenar pode mudar de um passo para o outro. Sem uma maneira de prever essas mudanças, o software pode alocar um bloco de memória pequeno, apenas para descobrir que ele é pequeno demais um momento depois, forçando-o a alocar um maior e copiar todos os dados para lá. Esse processo de redimensionamento é lento e pode desperdiçar um tempo valioso. O novo sistema olha adiante para as tarefas futuras para ver se os requisitos de memória estão crescendo. Se detectar um padrão onde o tamanho dos dados aumentará, o sistema espera para alocar a memória até saber o tamanho final necessário, evitando o dispendioso passo de redimensionamento inteiramente. Isso é particularmente eficaz para aplicações onde os dados crescem constantemente, permitindo que o sistema aloque a quantidade correta de memória de uma só vez.

Os pesquisadores também construíram uma arquitetura de sistema que separa o trabalho de planejamento do trabalho de execução. Eles criaram uma thread dedicada, ou uma linha de execução separada, que é responsável unicamente por construir esses grafos de instrução detalhados. Enquanto isso, outras threads lidam com a execução real das instruções nas GPUs. Essa separação garante que o processo de planejar os próximos passos nunca atrapalhe os passos que estão sendo realizados no momento. Os dois processos rodam lado a lado, comunicando-se através de uma fila otimizada que passa instruções do planejador para o executor. Esse design minimiza o tempo que o sistema passa esperando, garantindo que as GPUs sejam mantidas ocupadas com trabalho útil, em vez de ficarem ociosas enquanto o software decide o que fazer a seguir.

Os experimentos foram conduzidos no supercomputador Leonardo, na Itália, uma máquina com milhares de processadores e conexões de alta velocidade. A equipe utilizou códigos científicos do mundo real para garantir que suas descobertas se sustentariam em cenários práticos. Eles descobriram que, embora o novo método não tenha alterado os limites fundamentais de quanto dado poderia ser armazenado ou quão grande um problema poderia ser, ele melhorou significativamente a eficiência de como esse trabalho era distribuído. As melhorias foram mais perceptíveis em aplicações onde os padrões de acesso a dados eram complexos ou variáveis, pois o sistema conseguia ocultar melhor o tempo gasto com comunicação e gerenciamento de memória. Para aplicações com etapas de cálculo muito curtas, o novo escalonador reduziu o overhead o suficiente para manter o escalonamento eficiente mesmo com um grande número de processadores.

Este trabalho demonstra que a maneira como o software gerencia a logística interna de um supercomputador é tão importante quanto o poder bruto do hardware em si. Ao mover o esforço pesado de escalonamento para fora do caminho crítico e para um processo paralelo, os pesquisadores mostraram que é possível manter essas máquinas massivas operando com eficiência máxima. A abordagem de grafo de instruções oferece uma maneira de visualizar e gerenciar a complexa teia de dependências que existe nos programas paralelos modernos, transformando o que antes era um gargalo em um pipeline otim-imizado. À medida que os supercomputadores continuam a crescer em tamanho e complexidade, técnicas como esta serão essenciais para garantir que os cientistas possam obter o máximo de seus investimentos, permitindo que resolvam problemas que anteriormente eram grandes demais ou lentos demais para serem enfrentados.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →