La Ley de Moore necesita un abrazo. Los días de colocar transistores en pequeños chips de computadora de silicio están contados, y sus balsas salvavidas (aceleradores de hardware) tienen un precio.
Al programar un acelerador, un proceso en el que las aplicaciones descargan ciertas tareas al hardware del sistema, especialmente para acelerar esa tarea, debe crear un soporte de software completamente nuevo. Los aceleradores de hardware pueden ejecutar ciertas tareas en órdenes de magnitud más rápido que las CPU, pero no se pueden usar de forma inmediata. El software necesita usar eficientemente las instrucciones de los aceleradores para que sea compatible con todo el sistema de aplicaciones. Esto se traduce en una gran cantidad de trabajo de ingeniería que luego tendría que mantenerse para un nuevo chip en el que está compilando el código, con cualquier lenguaje de programación.
Ahora, los científicos del Laboratorio de Ciencias de la Computación e Inteligencia Artificial (CSAIL) del MIT crearon un nuevo lenguaje de programación llamado «Exo» para escribir código de alto rendimiento en aceleradores de hardware. Exo ayuda a los ingenieros de rendimiento de bajo nivel a transformar programas muy simples que especifican lo que quieren calcular, en programas muy complejos que hacen lo mismo que la especificación, pero mucho, mucho más rápido mediante el uso de estos chips aceleradores especiales. Los ingenieros, por ejemplo, pueden usar Exo para convertir una simple multiplicación de matrices en un programa más complejo, que se ejecuta órdenes de magnitud más rápido mediante el uso de estos aceleradores especiales.
A diferencia de otros lenguajes de programación y compiladores, Exo se basa en un concepto llamado «Exocompilación». «Tradicionalmente, mucha investigación se ha centrado en automatizar el proceso de optimización para el hardware específico», dice Yuka Ikarashi, Ph.D. estudiante de ingeniería eléctrica y ciencias de la computación y afiliado de CSAIL que es el autor principal de un nuevo artículo sobre Exo. «Esto es genial para la mayoría de los programadores, pero para los ingenieros de rendimiento, el compilador se interpone en el camino tan a menudo como ayuda. Debido a que las optimizaciones del compilador son automáticas, no hay una buena manera de arreglarlo cuando hace algo incorrecto y le da un 45 por ciento eficiencia en lugar del 90 por ciento».
Con Exocompilation, el ingeniero de rendimiento está de vuelta en el asiento del conductor. La responsabilidad de elegir qué optimizaciones aplicar, cuándo y en qué orden se externaliza desde el compilador, de vuelta al ingeniero de rendimiento. De esta manera, no tienen que perder el tiempo peleando con el compilador por un lado, o haciendo todo manualmente por el otro. Al mismo tiempo, Exo asume la responsabilidad de garantizar que todas estas optimizaciones sean correctas. Como resultado, el ingeniero de rendimiento puede dedicar su tiempo a mejorar el rendimiento, en lugar de depurar el código complejo y optimizado.
«El lenguaje Exo es un compilador que está parametrizado sobre el hardware al que se dirige; el mismo compilador puede adaptarse a muchos aceleradores de hardware diferentes», dice Adrian Sampson, profesor asistente en el Departamento de Ciencias de la Computación de la Universidad de Cornell. «En lugar de escribir un montón de código C++ desordenado para compilar un nuevo acelerador, Exo le brinda una forma abstracta y uniforme de escribir la ‘forma’ del hardware al que desea apuntar. Luego puede reutilizar el compilador Exo existente para adaptar a esa nueva descripción en lugar de escribir algo completamente nuevo desde cero. El impacto potencial de un trabajo como este es enorme: si los innovadores de hardware pueden dejar de preocuparse por el costo de desarrollar nuevos compiladores para cada nueva idea de hardware, pueden probar y enviar más ideas La industria podría romper su dependencia del hardware heredado que tiene éxito solo debido al bloqueo del ecosistema y a pesar de su ineficiencia».
Los chips de computadora de mayor rendimiento que se fabrican hoy en día, como el TPU de Google, el Neural Engine de Apple o los Tensor Cores de NVIDIA, impulsan la computación científica y las aplicaciones de aprendizaje automático al acelerar algo llamado «subprogramas clave», núcleos o computación de alto rendimiento (HPC). ) subrutinas.
Dejando de lado la jerga torpe, los programas son esenciales. Por ejemplo, algo llamado Subrutinas de álgebra lineal básica (BLAS) es una «biblioteca» o colección de tales subrutinas, que están dedicadas a los cálculos de álgebra lineal y permiten muchas tareas de aprendizaje automático como redes neuronales, pronósticos del tiempo, computación en la nube y descubrimiento de fármacos. . (BLAS es tan importante que ganó el Premio Turing Jack Dongarra en 2021). Sin embargo, estos nuevos chips, que requieren cientos de ingenieros para diseñar, son tan buenos como lo permiten estas bibliotecas de software HPC.
Actualmente, sin embargo, este tipo de optimización del rendimiento todavía se realiza a mano para garantizar que se utilice hasta el último ciclo de cómputo en estos chips. Las subrutinas de HPC se ejecutan regularmente a más del 90 por ciento de la eficiencia teórica máxima, y los ingenieros de hardware hacen todo lo posible para agregar un cinco o un 10 por ciento adicional de velocidad a estos picos teóricos. Por lo tanto, si el software no se optimiza agresivamente, todo ese arduo trabajo se desperdicia, que es exactamente lo que Exo ayuda a evitar.
Otra parte clave de Exocompilation es que los ingenieros de rendimiento pueden describir los nuevos chips para los que quieren optimizar, sin tener que modificar el compilador. Tradicionalmente, los desarrolladores del compilador mantienen la definición de la interfaz de hardware, pero con la mayoría de estos nuevos chips aceleradores, la interfaz de hardware es propietaria. Las empresas deben mantener su propia copia (bifurcación) de un compilador tradicional completo, modificado para admitir su chip particular. Esto requiere la contratación de equipos de desarrolladores de compiladores además de los ingenieros de rendimiento.
«En Exo, externalizamos la definición de backends específicos de hardware del exocompilador. Esto nos brinda una mejor separación entre Exo, que es un proyecto de código abierto, y el código específico de hardware, que a menudo es propietario. Hemos demostrado que podemos usar Exo para escribir rápidamente código que tenga el mismo rendimiento que la biblioteca Math Kernel de Intel optimizada a mano. Estamos trabajando activamente con ingenieros e investigadores en varias empresas», dice Gilbert Bernstein, un postdoctorado en la Universidad de California en Berkeley.
El futuro de Exo implica explorar un metalenguaje de programación más productivo y expandir su semántica para admitir modelos de programación paralelos para aplicarlo a más aceleradores, incluidas las GPU.
Ikarashi y Bernstein escribieron el artículo junto con Alex Reinking y Hasan Genc, ambos Ph.D. estudiantes de UC Berkeley y el profesor asistente del MIT Jonathan Ragan-Kelley.
Desarrollo del software central de IA ‘Deep Learning Compiler’
Yuka Ikarashi et al, Exocompilación para programación productiva de aceleradores de hardware, Actas de la 43.ª Conferencia Internacional ACM SIGPLAN sobre Diseño e Implementación de Lenguajes de Programación (2022). DOI: 10.1145/3519939.3523446
Esta historia se vuelve a publicar por cortesía de MIT News (web.mit.edu/newsoffice/), un sitio popular que cubre noticias sobre investigación, innovación y enseñanza del MIT.
Citación: Un nuevo lenguaje de programación para aceleradores de hardware (11 de julio de 2022) recuperado el 13 de julio de 2022 de https://techxplore.com/news/2022-07-language-hardware.html
Este documento está sujeto a derechos de autor. Aparte de cualquier trato justo con fines de estudio o investigación privados, ninguna parte puede reproducirse sin el permiso por escrito. El contenido se proporciona únicamente con fines informativos.