Criador do LLVM desenvolve nova linguagem de programação Mojo

Chris Lattner, fundador e arquiteto-chefe do LLVM e criador da linguagem de programação Swift, e Tim Davis, ex-chefe de projetos de IA do Google, como Tensorflow e JAX, apresentaram uma nova linguagem de programação, Mojo, que combina facilidade de uso para desenvolvimento de pesquisa e prototipagem rápida com potencial para formular produtos finais de alto desempenho. O primeiro é alcançado através do uso da sintaxe familiar da linguagem Python, e o segundo através da capacidade de compilar em código de máquina, mecanismos seguros de memória e uso de ferramentas de aceleração de hardware.

O projeto é focado no uso para desenvolvimento na área de aprendizado de máquina, mas é apresentado como uma linguagem de uso geral que amplia as capacidades do Python com ferramentas de programação de sistemas e é adequada para uma ampla gama de tarefas. Por exemplo, a linguagem é aplicável a áreas como computação de alto desempenho, processamento e transformação de dados. Um recurso interessante do Mojo é a capacidade de especificar o caractere emoji “🔥” como extensão para arquivos de código (por exemplo, “helloworld.🔥”), além da extensão de texto “.mojo”.

Atualmente, a linguagem está em fase de desenvolvimento intensivo e apenas a interface online é oferecida para testes. Assemblies separados para execução em sistemas locais devem ser publicados posteriormente, após receber feedback sobre a operação do ambiente web interativo. O código-fonte do compilador, JIT e outros desenvolvimentos relacionados ao projeto está planejado para ser aberto após a conclusão da arquitetura interna (o modelo para desenvolver um protótipo funcional a portas fechadas lembra o estágio inicial de desenvolvimento de LLVM, Clang e Rápido). Como a sintaxe do Mojo é baseada na linguagem Python e o sistema de tipos é próximo ao C/C++, no futuro eles planejam desenvolver ferramentas para simplificar a tradução de projetos existentes escritos em C/C++ e Python para Mojo, bem como para desenvolver projetos híbridos combinando código Python e Mojo.

O projeto foi concebido para envolver os recursos de hardware disponíveis de sistemas heterogêneos na realização de cálculos. Por exemplo, GPUs, aceleradores de aprendizado de máquina especializados e vetores de instrução do processador (SIMD) podem ser usados ​​para executar aplicativos Mojo e paralelizar cálculos. As razões apresentadas para desenvolver um subconjunto separado da linguagem Python, em vez de ingressar no trabalho de otimização existente do CPython, incluem foco na compilação, integração de recursos de programação do sistema e o uso de uma arquitetura interna fundamentalmente diferente que permite que o código seja executado em GPUs e vários aceleradores de hardware. No entanto, os desenvolvedores do Mojo pretendem permanecer compatíveis com o CPython tanto quanto possível.

O Mojo pode ser usado tanto no modo de interpretação usando JIT, quanto para compilação em arquivos executáveis ​​(AOT, ahead-of-time). O compilador possui tecnologias modernas integradas para otimização automática, armazenamento em cache e compilação distribuída. Os textos fonte na linguagem Mojo são convertidos em código intermediário de baixo nível MLIR (Multi-Level Intermediate Representation), desenvolvido pelo projeto LLVM e fornecendo recursos adicionais para otimizar o processamento do gráfico de fluxo de dados. O compilador permite usar vários back-ends que suportam MLIR para gerar código de máquina.

O uso de mecanismos de hardware adicionais para acelerar os cálculos torna possível obter um desempenho superior aos aplicativos C/C++ durante cálculos intensivos. Por exemplo, ao testar um aplicativo para gerar o conjunto Mandelbrot, um aplicativo compilado na linguagem Mojo quando executado na nuvem AWS (r7iz.metal-16xl) revelou-se 6 vezes mais rápido que a implementação em C++ (0.03 seg. vs. 0.20 seg.), e também 35 mil vezes mais rápido que um aplicativo Python ao usar o CPython 3.10.9 padrão (0.03 seg. vs. 1027 seg.) e 1500 vezes mais rápido ao usar PYPY (0.03 seg. vs. 46.1 seg.) .

Ao avaliar o desempenho na área de resolução de problemas de aprendizado de máquina, o AI stack Modular Inference Engine, escrito na linguagem Mojo, comparado a uma solução baseada na biblioteca TensorFlow, foi 3 vezes mais rápido ao processar um modelo de linguagem em um sistema com um processador Intel, 6.4 vezes mais rápido ao processar a execução do modelo de geração de recomendação e 2.1 vezes mais rápido ao trabalhar com modelos para processamento de informações visuais. Ao usar processadores AMD, os ganhos ao usar Mojo foram de 3.2, 5 e 2.2 vezes, e ao usar processadores ARM - 5.3, 7.5 e 1.7 vezes, respectivamente. A solução baseada em PyTorch ficou atrás do Mojo em 1.4, 1.1 e 1.5 vezes em CPUs Intel, 2.1, 1.2 e 1.5 vezes em CPUs AMD e 4, 4.3 e 1.3 vezes em CPUs ARM.

Criador do LLVM desenvolve nova linguagem de programação Mojo

A linguagem suporta digitação estática e recursos de segurança de memória de baixo nível que lembram o Rust, como rastreamento de vida útil de referência e verificador de empréstimo. Além de facilidades para trabalho seguro com ponteiros, a linguagem também fornece recursos para trabalho de baixo nível, por exemplo, acesso direto à memória em modo inseguro usando o tipo Pointer, chamando instruções SIMD individuais ou acessando extensões de hardware como TensorCores e AMX .

Criador do LLVM desenvolve nova linguagem de programação Mojo

Para simplificar a separação do código Python clássico e otimizado para funções com definições de tipo explícitas para todas as variáveis, propõe-se usar uma palavra-chave separada “fn” em vez de “def”. Da mesma forma para classes, se você precisar compactar dados estaticamente na memória durante a compilação (como em C), você pode usar o tipo “struct” em vez de “class”. Também é possível simplesmente importar módulos em linguagens C/C++, por exemplo, para importar a função cos da biblioteca matemática, você pode especificar “from “math.h” import cos”.

Fonte: opennet.ru

Adicionar um comentário