LLVM Creator desenvolve unha nova linguaxe de programación Mojo

Chris Lattner, fundador e arquitecto xefe de LLVM e creador da linguaxe de programación Swift, e Tim Davis, antigo xefe de proxectos de IA de Google como Tensorflow e JAX, presentaron unha nova linguaxe de programación Mojo que combina a facilidade de uso para I+D e prototipado rápido con idoneidade para produtos finais de alto rendemento. O primeiro conséguese mediante o uso da sintaxe familiar da linguaxe Python, e o segundo débese á capacidade de compilar a código máquina, mecanismos para a xestión segura da memoria e o uso de ferramentas para a aceleración hardware dos cálculos.

O proxecto céntrase no uso para o desenvolvemento de aprendizaxe automática, pero preséntase como unha linguaxe de propósito xeral que amplía as capacidades da linguaxe Python coa programación de sistemas e é adecuada para unha ampla gama de tarefas. Por exemplo, a linguaxe é aplicable a áreas como a informática de alto rendemento, o procesamento de datos e a transformación. Unha característica interesante de Mojo é a posibilidade de especificar o símbolo emoji "🔥" como extensión para ficheiros de código (por exemplo, "helloworld.🔥"), ademais da extensión de texto ".mojo".

Actualmente, o idioma está en desenvolvemento intensivo e só se ofrece a interface en liña para probar. Prométese que as montaxes separadas para executarse en sistemas locais se publicarán máis tarde, despois de recibir comentarios sobre o traballo do contorno web interactivo. O código fonte para o compilador, JIT e outros desenvolvementos relacionados co proxecto está previsto que se abra despois de que se complete o deseño da arquitectura interna (o modelo de desenvolvemento dun prototipo de traballo a porta pechada aseméllase á fase inicial de desenvolvemento de LLVM, Clang). e Swift). Dado que a sintaxe de Mojo está baseada en Python e o sistema de tipos está próximo a C/C++, hai plans no futuro para desenvolver un conxunto de ferramentas para facilitar a tradución dos proxectos existentes escritos en C/C++ e Python a Mojo, así como desenvolver proxectos híbridos que combinan código Python e Mojo.

O proxecto está deseñado para implicar nos cálculos os recursos hardware dos sistemas heteroxéneos dispoñibles no sistema. Por exemplo, as GPU, os aceleradores especializados de aprendizaxe automática e as instrucións de procesamento vectorial (SIMD) pódense usar para executar aplicacións Mojo e paralelizar os cálculos. A razón para desenvolver un subconxunto separado da linguaxe Python, en lugar de unirse ao traballo de optimización do CPython existente, cítase como un foco de compilación, a integración das capacidades de programación do sistema e o uso dunha arquitectura interna fundamentalmente diferente que permite que o código executado en GPU e varios aceleradores de hardware. Ao mesmo tempo, os desenvolvedores de Mojo pretenden respectar a compatibilidade con CPython na medida do posible.

Mojo pódese usar tanto no modo de interpretación JIT como para a compilación en ficheiros executables (AOT, antes de tempo). O compilador incorpora tecnoloxías modernas para optimización automática, almacenamento en caché e compilación distribuída. Os textos fonte en lingua Mojo convértense en código intermedio de baixo nivel MLIR (Multi-Level Intermediate Representation), desenvolvido polo proxecto LLVM e que proporciona características adicionais para optimizar o procesamento dun gráfico de fluxo de datos. O compilador permítelle usar varios backends que admiten MLIR para xerar código de máquina.

O uso de mecanismos de hardware adicionais para acelerar os cálculos permite acadar un rendemento que, con cálculos intensivos, supera as aplicacións C/C++. Por exemplo, ao probar unha aplicación para xerar un conxunto de Mandelbrot, a aplicación Mojo compilada, cando se executou na nube de AWS (r7iz.metal-16xl), foi 6 veces máis rápida que a implementación C++ (0.03 segundos fronte a 0.20 segundos). .), así como 35 mil veces máis rápido que unha aplicación Python que usa CPython 3.10.9 de serie (0.03 segundos fronte a 1027 segundos) e 1500 veces máis rápido usando PYPY (0.03 segundos fronte a 46.1 segundos).

Ao avaliar o rendemento na área de resolución de problemas de aprendizaxe automática, a pila de AI Modular Inference Engine escrita en linguaxe Mojo, en comparación cunha solución baseada na biblioteca TensorFlow, resultou ser 3 veces máis rápida nun sistema con Intel. procesador ao procesar un modelo de linguaxe, 6.4 veces máis rápido cando se executa o modelo de xeración de recomendacións e 2.1 veces máis rápido cando se traballa con modelos para procesar información visual. Cando se usan procesadores AMD, a ganancia ao usar Mojo foi de 3.2, 5 e 2.2 veces, e cando se usan procesadores ARM - 5.3, 7.5 e 1.7 veces, respectivamente. A solución baseada en PyTorch quedou por detrás de Mojo en 1.4, 1.1 e 1.5 veces na CPU Intel, 2.1, 1.2 e 1.5 veces na CPU AMD e 4, 4.3 e 1.3 veces na CPU ARM.

LLVM Creator desenvolve unha nova linguaxe de programación Mojo

A linguaxe admite a escritura estática e funcións seguras para a memoria de baixo nivel que lembran as funcións de Rust, como o seguimento de referencia durante a vida útil e o verificador de préstamos variables (comprobador de préstamos). Ademais dos medios para un funcionamento seguro con punteiros, a linguaxe tamén ofrece funcións para traballos de baixo nivel, por exemplo, é posible acceder directamente á memoria en modo inseguro usando o tipo Pointer, chamar instrucións SIMD individuais ou acceder a extensións de hardware como como TensorCores e AMX.

LLVM Creator desenvolve unha nova linguaxe de programación Mojo

Para simplificar a separación do código Python clásico e optimizado para funcións con definicións de tipos explícitas para todas as variables, proponse utilizar unha palabra clave separada "fn" en lugar de "def". Do mesmo xeito para as clases, se precisa empaquetar datos estáticamente na memoria no momento da compilación (como en C), en lugar de "clase", pode usar o tipo "struct". Tamén é posible importar simplemente módulos en linguaxes C / C ++, por exemplo, para importar a función cos da biblioteca matemática, pode especificar "de "math.h" importar cos".

Fonte: opennet.ru

Engadir un comentario