Uma linguagem de programação para aceleradores de hardware

Uma linguagem de programação para aceleradores de hardware

A Lei de Moore precisa de um abraço. Os dias de encher transistores em pequenos chips de computador de silício estão contados, e seus botes salva-vidas – aceleradores de hardware – vêm com um preço. 

Ao programar um acelerador – um processo em que os aplicativos descarregam certas tarefas no hardware do sistema, especialmente para acelerar essa tarefa – você precisa criar um suporte de software totalmente novo. Aceleradores de hardware podem executar certas tarefas com mais rapidez do que CPUs, mas não podem ser usados ​​imediatamente. O software precisa usar com eficiência as instruções dos aceleradores para torná-lo compatível com todo o sistema de aplicativos. Isso se traduz em muito trabalho de engenharia que teria que ser mantido para um novo chip para o qual você está compilando o código, com qualquer linguagem de programação. 

Agora, cientistas do Laboratório de Ciência da Computação e Inteligência Artificial do MIT (CSAIL) criaram uma nova linguagem de programação chamada “Exo” para escrever código de alto desempenho em aceleradores de hardware. O Exo ajuda engenheiros de desempenho de baixo nível a transformar programas muito simples que especificam o que eles querem computar em programas muito complexos que fazem a mesma coisa que a especificação, mas muito, muito mais rápido usando esses chips aceleradores especiais. Os engenheiros, por exemplo, podem usar o Exo para transformar uma simples multiplicação de matrizes em um programa mais complexo, que executa ordens de magnitude mais rapidamente usando esses aceleradores especiais.

Ao contrário de outras linguagens de programação e compiladores, o Exo é construído em torno de um conceito chamado “Exocompilation”. “Tradicionalmente, muitas pesquisas se concentram em automatizar o processo de otimização para o hardware específico”, diz Yuka Ikarashi, estudante de doutorado em engenharia elétrica e ciência da computação e afiliada do CSAIL, principal autora de um novo artigo sobre o Exo. “Isso é ótimo para a maioria dos programadores, mas para engenheiros de desempenho, o compilador atrapalha tanto quanto ajuda. Como as otimizações do compilador são automáticas, não há uma boa maneira de corrigi-lo quando ele faz a coisa errada e oferece 45% de eficiência em vez de 90%.”   

Com Exocompilation, o engenheiro de desempenho está de volta ao banco do motorista. Responsabilidade por escolher quais otimizações aplicar, quando e em que ordem são externalizadas do compilador, de volta ao engenheiro de desempenho. Dessa forma, eles não precisam perder tempo lutando contra o compilador, por um lado, ou fazendo tudo manualmente, por outro. Ao mesmo tempo, a Exo assume a responsabilidade de garantir que todas essas otimizações estejam corretas. Como resultado, o engenheiro de desempenho pode gastar seu tempo aprimorando o desempenho, em vez de depurar o código complexo e otimizado.

“A linguagem Exo é um compilador parametrizado sobre o hardware a que se destina; o mesmo compilador pode se adaptar a muitos aceleradores de hardware diferentes”, diz Adrian Sampson, professor assistente do Departamento de Ciência da Computação da Cornell University. “Em vez de escrever um monte de código C++ confuso para compilar para um novo acelerador, o Exo oferece uma maneira abstrata e uniforme de escrever a 'forma' do hardware que você deseja atingir. Em seguida, você pode reutilizar o compilador Exo existente para se adaptar a essa nova descrição, em vez de escrever algo totalmente novo do zero. O impacto potencial de um trabalho como esse é enorme: se os inovadores de hardware podem parar de se preocupar com o custo de desenvolver novos compiladores para cada nova ideia de hardware, eles podem experimentar e enviar mais ideias. 

Os chips de computador de mais alto desempenho fabricados hoje, como o TPU do Google, o Neural Engine da Apple ou os Tensor Cores da NVIDIA, potencializam a computação científica e os aplicativos de aprendizado de máquina acelerando algo chamado “subprogramas-chave”, kernels ou computação de alto desempenho (HPC ) sub-rotinas.  

Deixando de lado o jargão desajeitado, os programas são essenciais. Por exemplo, algo chamado Basic Linear Algebra Subroutines (BLAS) é uma “biblioteca” ou coleção de tais sub-rotinas, que são dedicadas a cálculos de álgebra linear e permitem muitas tarefas de aprendizado de máquina, como redes neurais, previsões do tempo, computação em nuvem e descoberta de medicamentos. . (O BLAS é tão importante que ganhou o Prêmio Turing de Jack Dongarra em 2021.) No entanto, esses novos chips - que levam centenas de engenheiros para projetar - são tão bons quanto essas bibliotecas de software HPC permitem.

Atualmente, porém, esse tipo de otimização de desempenho ainda é feito manualmente para garantir que cada último ciclo de computação nesses chips seja usado. As sub-rotinas de HPC são executadas regularmente com mais de 90% do pico de eficiência teórica, e os engenheiros de hardware fazem um grande esforço para adicionar cinco ou 10% a mais de velocidade a esses picos teóricos. Portanto, se o software não for otimizado de forma agressiva, todo esse trabalho árduo será desperdiçado - exatamente o que o Exo ajuda a evitar. 

Outra parte importante do Exocompilation é que os engenheiros de desempenho podem descrever os novos chips para os quais desejam otimizar, sem precisar modificar o compilador. Tradicionalmente, a definição da interface de hardware é mantida pelos desenvolvedores do compilador, mas com a maioria desses novos chips aceleradores, a interface de hardware é proprietária. As empresas precisam manter sua própria cópia (fork) de todo um compilador tradicional, modificado para suportar seu chip específico. Isso requer a contratação de equipes de desenvolvedores de compiladores, além dos engenheiros de desempenho.

“No Exo, em vez disso, externalizamos a definição de back-ends específicos de hardware do exocompiler. Isso nos dá uma melhor separação entre o Exo - que é um projeto de código aberto - e o código específico de hardware - que geralmente é proprietário. Mostramos que podemos usar o Exo para escrever rapidamente código com o mesmo desempenho da Biblioteca de Kernel de Matemática otimizada para mão da Intel. Estamos trabalhando ativamente com engenheiros e pesquisadores de várias empresas”, diz Gilbert Bernstein, pós-doc na Universidade da Califórnia em Berkeley. 

O futuro do Exo envolve explorar uma metalinguagem de agendamento mais produtiva e expandir sua semântica para suportar modelos de programação paralela para aplicá-la a ainda mais aceleradores, incluindo GPUs.

Ikarashi e Bernstein escreveram o artigo ao lado de Alex Reinking e Hasan Genc, ​​ambos estudantes de doutorado na UC Berkeley, e o professor assistente do MIT Jonathan Ragan-Kelley.

Este trabalho foi parcialmente apoiado pelo centro Applications Driving Architectures, um dos seis centros do JUMP, um programa da Semiconductor Research Corporation co-patrocinado pela Defense Advanced Research Projects Agency. Ikarashi foi apoiado pela Funai Overseas Scholarship, Masason Foundation e Great Educators Fellowship. A equipe apresentou o trabalho na Conferência ACM SIGPLAN sobre Design e Implementação de Linguagem de Programação 2022.

Realize seu sonho

Sua empresa precisa
de uma solução?