Simple Science

Ciência de ponta explicada de forma simples

# Informática# Computação distribuída, paralela e em cluster# Aprendizagem de máquinas# Desempenho

Otimizando Desempenho e Energia em Sistemas de Computação

Um novo jeito de melhorar a eficiência das tarefas enquanto controla o consumo de energia.

― 11 min ler


Ajustando o Desempenho emAjustando o Desempenho emSistemas de Computaçãoo uso de energia.Um novo método facilita a performance e
Índice

O mundo da computação mudou muito nos últimos anos. Com o surgimento de sistemas de computação avançados, especialmente aqueles com vários processadores, vimos um aumento na rapidez com que tarefas científicas podem ser concluídas. Mas mais processadores significam mais consumo de energia, o que pode causar problemas. À medida que os sistemas ficam maiores e mais complexos, eles consomem mais energia e podem superaquecer. Isso cria a necessidade de gerenciar o uso de energia de maneira cuidadosa para manter tudo funcionando direitinho.

Ao projetar sistemas de computação modernos, o consumo de energia é um fator chave. Simplesmente reduzir o uso de energia nem sempre ajuda, porque isso pode desacelerar a conclusão das tarefas. Se alguém faz uma abordagem cega para limitar a energia, isso pode afetar negativamente o desempenho das aplicações.

Para enfrentar esse desafio, apresentamos um novo método que usa um tipo de inteligência artificial chamado Redes Neurais Graph (GNNs). Esse método ajuda a otimizar como as tarefas científicas são executadas, mantendo o uso de energia dentro de limites específicos. O objetivo é melhorar o desempenho e a eficiência energética, reduzindo o tempo que uma tarefa leva e a energia que consome.

A Necessidade de Gerenciamento de Energia

Os sistemas de computação de alto desempenho cresceram significativamente em tamanho e complexidade. Eles se tornaram cruciais para várias aplicações científicas. Apesar de suas capacidades impressionantes, esses sistemas têm uma grande desvantagem: consomem muita energia. O aumento do uso de energia leva a temperaturas mais altas e pode reduzir a vida útil dos dispositivos.

Como resultado, gerenciar o consumo de energia se tornou essencial. Focar apenas em melhorias de hardware não é suficiente. Práticas de codificação ruins podem levar a um uso ineficiente do hardware subjacente, anulando quaisquer benefícios das melhorias de hardware.

Existem soluções disponíveis para gerenciar o uso de energia em níveis de processador e data centers. Por exemplo, ferramentas fornecidas por vendedores de hardware podem ajudar a manter a energia dentro de certos limites. No entanto, usar limites fixos de energia pode desacelerar a execução, o que pode não funcionar bem para aplicações em tempo real.

Nos data centers, uma estratégia comum é ter mais hardware disponível do que pode ser alimentado de uma vez. Esse método pode levar a ineficiências se a energia for mal distribuída entre os recursos disponíveis.

Para lidar com os desafios de desempenho e gerenciamento de energia, é essencial refinar como as aplicações funcionam. Adaptar aplicações para atender aos requisitos de desempenho e energia pode levar a melhores resultados em vários ambientes, como computação em borda ou data centers.

O Papel do OpenMP

OpenMP é um modelo de programação amplamente utilizado que permite que os desenvolvedores executem tarefas em paralelo em múltiplos núcleos de um processador. Isso ajuda a melhorar o desempenho das aplicações, já que tarefas podem ser executadas ao mesmo tempo. Ele tem parâmetros que podem ser ajustados para influenciar como as tarefas se desempenham, tornando-o bem adequado para gerenciar energia e desempenho.

Embora haja muita pesquisa sobre o ajuste de desempenho, há menos estudos que tratam das necessidades específicas de gerenciamento de energia. O espaço de busca para configurações do OpenMP é vasto; assim, encontrar as melhores configurações pode ser demorado e consumir muitos recursos.

Um exemplo comum é o kernel ApplyAccelerationBoundaryConditionsForNodes da aplicação proxy LULESH. Testar todas as possíveis configurações do OpenMP em um processador dual-socket Haswell revela que enquanto algumas configurações melhoram dramaticamente o desempenho em certos níveis de energia, elas nem sempre levam à melhor eficiência energética.

Isso mostra que otimizar para velocidade nem sempre combina bem com otimizar para uso de energia. Em muitos casos, não existe uma solução única, e é necessário um ajuste fino para alcançar os melhores resultados.

Apresentando a Técnica Baseada em GNN

Para enfrentar os desafios em torno do desempenho, energia e gerenciamento energético, propomos uma técnica que utiliza GNNs. Modelando regiões do código como gráficos sensíveis ao fluxo, podemos capturar as características importantes e as relações entre diferentes partes do código.

Por meio de testes e análises extensivas, nossa abordagem ajuda a identificar as melhores configurações do OpenMP que levam a tempos de execução melhores sob diferentes restrições de energia. Também podemos otimizar para o Produto Energia-Atraso (EDP), que combina fatores de desempenho e energia em uma única métrica.

Nosso método se concentra em usar representações de código estáticas que não requerem a execução do código, permitindo evitar os processos longos e pesados geralmente associados à busca de configurações ótimas por meio de testes de execução.

Além disso, usar GNNs ajuda a reduzir o espaço de busca, podando efetivamente as configurações que provavelmente não fornecerão bons resultados. Isso nos permite encontrar configurações ótimas ou próximas do ótimo sem extensas tentativas e erros.

Representações Estáticas de Código

O aprendizado profundo (DL) ganhou popularidade na análise e otimização de código. No entanto, para aproveitar essas técnicas, precisamos de representações fortes que capturem as características presentes no código.

Muitos estudos anteriores representavam programas simplesmente como uma série de tokens. Embora isso possa funcionar até certo ponto, não leva em conta a natureza estruturada do código. Em vez disso, precisamos de representações que capturem tanto a sintaxe quanto a semântica do código, incluindo fluxo de controle, dados e chamadas.

Para alcançar isso, usamos uma ferramenta chamada PROGRAML, que cria um multigráfico sensível ao fluxo. Cada instrução no código é representada como um vértice, com arestas denotando o fluxo de controle, dados e chamadas entre eles. Isso permite que nosso modelo entenda melhor as relações dentro do código do que representações baseadas em tokens.

Restrições de Energia e Perfilamento Energético

A Intel introduziu uma ferramenta conhecida como RAPL para gerenciamento de energia em seus processadores, permitindo que os usuários monitorem e controlem o uso de energia de forma eficaz. Também usamos uma ferramenta chamada Variorum para definir restrições de energia em nossos sistemas experimentais.

Coletar informações sobre desempenho e perfilamento de energia é essencial para entender como o código se comporta sob diferentes restrições de energia. Utilizamos várias ferramentas, como PAPI, para coletar dados detalhados de desempenho, ajudando a otimizar nossas configurações.

Redes Neurais Graph Explicadas

Avanços recentes em aprendizado profundo permitem uma análise mais eficaz de dados não-euclidianos, como gráficos. As GNNs surgiram como uma maneira poderosa de modelar relações e dependências entre objetos representados dessa forma.

Usar um tipo específico de GNN chamado Redes Convolucionais Gráficas Relacionais (RGCNs) nos ajuda a criar modelos que podem se adaptar à estrutura única de nossos gráficos de código. As RGCNs são projetadas para trabalhar com dados relacionais e podem processar características específicas de diferentes tipos de arestas no gráfico.

À medida que construímos nosso modelo, extraímos características importantes dos gráficos de código que são então passadas pelas camadas de GNN. A saída é usada para prever as melhores configurações do OpenMP para nossos objetivos-alvo.

Duas Abordagens para Ajustar Desempenho e Energia

Propomos duas abordagens principais para o ajuste:

  1. Identificar a configuração do OpenMP que leva à execução mais rápida, dada uma certa restrição de energia.
  2. Encontrar tanto a configuração do OpenMP quanto o nível de energia que minimiza o produto energia-atraso.

A primeira abordagem foca em maximizar a velocidade enquanto respeita os limites de energia. A segunda abordagem fornece um foco duplo tanto em velocidade quanto em consumo de energia, visando equilibrar os dois para uma execução ótima.

As restrições de energia nos ajudam a limitar o uso sem sacrificar o desempenho. Ao empregar um modelo de GNN treinado em gráficos de código sensíveis ao fluxo, podemos prever efetivamente configurações que resultarão nos melhores resultados em vários cenários.

Configurando o Espaço de Busca

Para tornar nossa abordagem eficaz, definimos um espaço de busca abrangente que inclui uma variedade de configurações válidas. Isso nos permite explorar uma ampla gama de possibilidades sem sobrecarga excessiva.

Ao garantir que o modelo tenha variabilidade suficiente nos gráficos de código, juntamente com uma compreensão de como diferentes parâmetros afetam a execução, ajudamos nosso modelo de GNN a descobrir configurações que melhoram significativamente o desempenho enquanto mantêm o uso de energia sob controle.

Validação e Configuração Experimental

Validamos nossa abordagem por meio de uma série de experimentos bem definidos. Usando dois sistemas com processadores Intel, compilamos aplicações e as transformamos em representações intermediárias, permitindo extrair os gráficos de código necessários para análise.

Nossos experimentos tinham como objetivo identificar as configurações ótimas para minimizar o tempo de execução e o consumo de energia. Analisamos os resultados em múltiplas restrições de energia, comparando nossas descobertas com métodos de ajuste tradicionais que requerem execuções de código extensas.

Resultados e Comparação de Desempenho

Os resultados de nossos experimentos demonstram a eficácia do nosso método de ajuste baseado em GNN. Sob várias restrições de energia, nossa abordagem consistentemente superou métodos de ajuste tradicionais, como BLISS e OpenTuner.

Conseguimos aumentos significativos de velocidade em comparação com as configurações padrão do OpenMP, sem precisar executar código várias vezes, o que é uma exigência comum para outros métodos de ajuste. Isso é particularmente valioso em ambientes onde tempo e recursos são limitados.

Nosso método baseado em GNN também permitiu uma melhor redução de energia enquanto mantinha altas velocidades de execução. Conseguimos minimizar efetivamente o produto energia-atraso, oferecendo configurações que melhoraram tanto o desempenho quanto a eficiência energética.

Inclusão de Contadores de Desempenho

Para explorar se a inclusão de contadores de desempenho poderia melhorar ainda mais os resultados, incorporamos essas características dinâmicas em nosso modelo. Coletar informações sobre falhas de cache e outras métricas de desempenho permitiu que nosso modelo de GNN ajustasse configurações com ainda mais precisão.

Com essa abordagem integrada, vimos uma melhoria em nossas previsões, demonstrando que combinar características estáticas e dinâmicas leva a resultados de ajuste mais robustos. Embora o perfilamento adicione alguma sobrecarga, ela é mínima se comparada ao extenso ajuste baseado em execução.

Generalização para Restrições de Energia Desconhecidas

Uma grande vantagem da nossa técnica baseada em GNN é sua capacidade de se adaptar a restrições de energia desconhecidas. Treinando o modelo em várias configurações, garantimos que ele possa generalizar para novos limites de energia que não faziam parte do conjunto de treinamento inicial.

Por meio de testes direcionados, validamos que nosso modelo pode prever efetivamente configurações para restrições de energia não vistas, mantendo alto desempenho em ambos os sistemas. Essa capacidade é essencial para data centers e ambientes onde as restrições de energia podem mudar frequentemente.

Conclusão

No clima atual da computação, equilibrar desempenho e consumo de energia é mais crítico do que nunca. Nossa técnica proposta baseada em GNN para ajustar configurações do OpenMP sob restrições de energia atende a essas necessidades.

Através de representações estáticas de código e modelagem avançada de GNN, podemos identificar configurações ótimas que levam a tempos de execução melhores e eficiência energética sem a sobrecarga típica de múltiplas execuções de código.

Usando aprendizado por transferência e otimizando nossa abordagem, estabelecemos um novo padrão para como gerenciar o desempenho em ambientes de computação de alto desempenho. Trabalhos futuros explorarão a extensão dessas técnicas para outras plataformas e aplicações, garantindo que continuemos acompanhando o cenário em constante evolução da computação.

Fonte original

Título: Power Constrained Autotuning using Graph Neural Networks

Resumo: Recent advances in multi and many-core processors have led to significant improvements in the performance of scientific computing applications. However, the addition of a large number of complex cores have also increased the overall power consumption, and power has become a first-order design constraint in modern processors. While we can limit power consumption by simply applying software-based power constraints, applying them blindly will lead to non-trivial performance degradation. To address the challenge of improving the performance, power, and energy efficiency of scientific applications on modern multi-core processors, we propose a novel Graph Neural Network based auto-tuning approach that (i) optimizes runtime performance at pre-defined power constraints, and (ii) simultaneously optimizes for runtime performance and energy efficiency by minimizing the energy-delay product. The key idea behind this approach lies in modeling parallel code regions as flow-aware code graphs to capture both semantic and structural code features. We demonstrate the efficacy of our approach by conducting an extensive evaluation on $30$ benchmarks and proxy-/mini-applications with $68$ OpenMP code regions. Our approach identifies OpenMP configurations at different power constraints that yield a geometric mean performance improvement of more than $25\%$ and $13\%$ over the default OpenMP configuration on a 32-core Skylake and a $16$-core Haswell processor respectively. In addition, when we optimize for the energy-delay product, the OpenMP configurations selected by our auto-tuner demonstrate both performance improvement of $21\%$ and $11\%$ and energy reduction of $29\%$ and $18\%$ over the default OpenMP configuration at Thermal Design Power for the same Skylake and Haswell processors, respectively.

Autores: Akash Dutta, Jee Choi, Ali Jannesari

Última atualização: 2023-02-22 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2302.11467

Fonte PDF: https://arxiv.org/pdf/2302.11467

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes