Avanços em IA na Programação Paralela Automatizada
Uma nova ferramenta de IA melhora a automação da programação paralela usando pragmas do OpenMP.
― 8 min ler
Índice
Com o aumento dos processadores multi-core, tá rolando uma necessidade crescente de usar programação paralela. Isso significa que várias tarefas são feitas ao mesmo tempo. O OpenMP é uma ferramenta super usada que ajuda os programadores a escrever Código Paralelo. Mas, escrever esse tipo de código na mão pode ser complicado e demorado. Pra deixar tudo mais fácil, várias ferramentas automáticas conhecidas como compiladores source-to-source (S2S) foram criadas pra converter código normal em código paralelo. Mas, estudos recentes mostram que essas ferramentas muitas vezes enfrentam desafios e nem sempre funcionam bem.
Esse artigo fala sobre um método novo que combina técnicas modernas de IA com a grande quantidade de código fonte disponível pra melhorar o processo de paralelização automatizada. Especificamente, uma nova ferramenta é proposta pra ajudar a identificar e sugerir como usar as pragmas do OpenMP-instruções especiais que indicam onde o código pode rodar em paralelo. O método usa um tipo de modelo de IA conhecido como Transformer, que organiza o código de uma maneira que destaca sua estrutura.
A Necessidade de Paralelização
A demanda por mais poder computacional continua crescendo, levando a montagens de computadores complexas. Um desenvolvimento significativo foi a mudança para computação de alto desempenho como serviço (HPCaaS). Esse serviço oferece aos usuários acesso a recursos computacionais avançados. Com os CPUs ficando mais potentes e com mais núcleos, a importância de escrever aplicativos paralelos eficientes ficou ainda mais urgente.
Porém, criar código paralelo não é tão simples. Os programadores precisam entender bem a estrutura do código e como diferentes partes interagem entre si. Se não for feito corretamente, podem surgir problemas, como condições de corrida, onde várias partes do código tentam acessar a mesma variável ao mesmo tempo, causando erros. Além disso, distribuir tarefas de forma equilibrada entre vários processadores, chamado de balanceamento de carga, é outro desafio.
Por conta da complexidade envolvida, existem relativamente poucos especialistas em programação paralela comparado ao número de pessoas que poderiam se beneficiar disso. Essa lacuna destaca a necessidade de ferramentas que simplifiquem o processo de programação.
Compiladores Source-to-Source
Os compiladores S2S ajudam os programadores convertendo automaticamente código serial (aquele que roda passo a passo) em código paralelo. Essas ferramentas analisam o código pra identificar elementos que poderiam atrapalhar a paralelização e inserem as diretrizes do OpenMP apropriadas. Mas, elas têm várias desvantagens. Podem ser lentas, às vezes produzem resultados não tão bons e exigem manutenção constante pra se adaptar a novas linguagens de programação ou padrões de programação paralela.
Avanços em IA, especialmente em processamento de linguagem natural (NLP), mostram potencial pra superar algumas limitações enfrentadas por compiladores S2S tradicionais. Modelos de linguagem grandes podem aprender e entender linguagens de programação, tornando-se potencialmente adequados pra tarefas de codificação.
Desafios com Ferramentas de IA Existentes
As ferramentas de IA atuais que ajudam programadores muitas vezes não conseguem captar as nuances da programação paralela. Embora possam ser úteis, falta ferramentas projetadas especificamente pra ajudar a escrever código paralelo usando OpenMP. Os modelos de IA existentes geralmente abordam a tarefa tratando o problema como partes separadas, o que pode não ser o método mais eficaz.
A pesquisa introduz uma nova abordagem que melhora essas limitações usando um método mais integrado pra prever tanto a necessidade de pragmas OpenMP quanto atributos de memória compartilhada associados. Esse novo modelo é feito pra tratar melhor as conexões entre essas tarefas.
O Modelo Proposto
O novo modelo se baseia em arquiteturas existentes baseadas em Transformer e é adaptado pra tarefas de programação. Ele usa múltiplas representações de código, como árvores de sintaxe abstrata (ASTs) e gráficos de fluxo de dados (DFGs), pra melhorar sua compreensão da estrutura do código.
O modelo aceita entrada de duas formas: como uma sequência de tokens que representam o código real e como o gráfico de fluxo de dados serializado que descreve como as variáveis interagem. Essa configuração permite que o modelo compreenda melhor as relações entre diferentes partes do código, o que é essencial pra fazer previsões corretas de paralelização.
A capacidade do modelo de aproveitar diferentes representações de código leva a previsões mais precisas e robustas sobre a necessidade de pragmas OpenMP e as cláusulas de privacidade ou redução necessárias.
Avaliação do Modelo
Pra testar o novo modelo, foram feitos experimentos extensivos usando um conjunto de dados com mais de 54.000 trechos de código em C e C++ especificamente projetados pra análise do OpenMP. Esse conjunto de dados foi cuidadosamente selecionado pra garantir que contivesse exemplos relevantes de código paralelo, maximizando sua eficácia pra treinamento e avaliação.
Os resultados indicam que o modelo proposto supera significativamente tanto as abordagens tradicionais quanto os modelos de IA existentes em prever a necessidade de pragmas OpenMP. Ele alcança maior precisão e reduz as chances de falsos negativos, o que quer dizer que ele identifica com mais exatidão as situações onde a paralelização é viável.
O modelo também mostra melhorias baseadas no contexto, indicando que considerar um escopo mais amplo do código ao redor de um loop for leva a previsões melhores.
Uso de Aumento de Dados
Técnicas de aumento de dados foram aplicadas pra melhorar ainda mais o desempenho do modelo. Nesse contexto, as variáveis foram renomeadas durante o treinamento pra criar um conjunto de dados mais diversificado. Esse método visava evitar que o modelo ficasse muito dependente de nomes de variáveis específicos, permitindo que ele generalizasse melhor pra novos exemplos.
A introdução de aprendizado em currículo, onde o aumento de dados é gradualmente aumentado, se mostrou benéfica. Ajudou o modelo a manter um nível de desempenho forte mesmo quando confrontado com entradas modificadas.
Comparando Classificação Multi-label vs. Binária
Um aspecto notável da pesquisa foi a comparação entre tratar as tarefas de previsão individualmente (classificação binária) versus coletivamente (classificação multi-label). As descobertas sugerem que uma abordagem multi-label, que considera as tarefas de prever pragmas OpenMP e atributos de memória compartilhada juntas, gera resultados superiores.
Ao reconhecer as relações entre as tarefas, o método multi-label permite uma estratégia de previsão mais integrada, levando a menos falsos negativos e um desempenho geral melhor na identificação da necessidade de paralelização.
Testes em Situações Reais
O modelo também foi aplicado em benchmarks do mundo real, como NAS, SPEC e PolyBench, que consistem em códigos científicos projetados pra usar OpenMP de forma eficaz. O desempenho do modelo proposto foi significativamente melhor do que as abordagens existentes, mostrando sua aplicabilidade em cenários práticos.
Pra contextualizar suas capacidades, o modelo foi comparado ao ChatGPT, uma ferramenta de IA bem conhecida. Enquanto o ChatGPT se sai bem em várias tarefas de linguagem natural, ele não teve um bom desempenho em prever pragmas OpenMP, destacando a natureza especializada do design do modelo proposto.
Conclusão e Trabalhos Futuros
Essa pesquisa enfatiza a importância de aproveitar modelos multimodais pra prever com precisão a necessidade de paralelização no código. Ao utilizar várias representações do código, como ASTs e DFGs, o modelo proposto atinge um desempenho superior em comparação com modelos que dependem apenas do código original.
As descobertas revelam que uma abordagem colaborativa pra prever a necessidade de paralelização e atributos de memória compartilhada oferece melhorias notáveis. Com base nesse sucesso, os esforços futuros vão se concentrar em melhorar ainda mais o desempenho do modelo, pré-treinando-o em conjuntos de dados que enfatizam código em C e C++.
Além disso, a pesquisa vai explorar a geração direta de pragmas OpenMP, proporcionando um controle mais fino sobre as tarefas de paralelização e melhorando a correção geral das modificações de código sugeridas.
Resumindo, o trabalho abre novos caminhos na área de programação assistida por IA, visando reduzir a lacuna entre a crescente demanda por computação paralela e a complexidade de escrever código paralelo eficiente.
Título: Advising OpenMP Parallelization via a Graph-Based Approach with Transformers
Resumo: There is an ever-present need for shared memory parallelization schemes to exploit the full potential of multi-core architectures. The most common parallelization API addressing this need today is OpenMP. Nevertheless, writing parallel code manually is complex and effort-intensive. Thus, many deterministic source-to-source (S2S) compilers have emerged, intending to automate the process of translating serial to parallel code. However, recent studies have shown that these compilers are impractical in many scenarios. In this work, we combine the latest advancements in the field of AI and natural language processing (NLP) with the vast amount of open-source code to address the problem of automatic parallelization. Specifically, we propose a novel approach, called OMPify, to detect and predict the OpenMP pragmas and shared-memory attributes in parallel code, given its serial version. OMPify is based on a Transformer-based model that leverages a graph-based representation of source code that exploits the inherent structure of code. We evaluated our tool by predicting the parallelization pragmas and attributes of a large corpus of (over 54,000) snippets of serial code written in C and C++ languages (Open-OMP-Plus). Our results demonstrate that OMPify outperforms existing approaches, the general-purposed and popular ChatGPT and targeted PragFormer models, in terms of F1 score and accuracy. Specifically, OMPify achieves up to 90% accuracy on commonly-used OpenMP benchmark tests such as NAS, SPEC, and PolyBench. Additionally, we performed an ablation study to assess the impact of different model components and present interesting insights derived from the study. Lastly, we also explored the potential of using data augmentation and curriculum learning techniques to improve the model's robustness and generalization capabilities.
Autores: Tal Kadosh, Nadav Schneider, Niranjan Hasabnis, Timothy Mattson, Yuval Pinter, Gal Oren
Última atualização: 2023-05-16 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2305.11999
Fonte PDF: https://arxiv.org/pdf/2305.11999
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.