Nuevo lenguaje de programación para computación de alto rendimiento
Muchas empresas invierten grandes cantidades en la contratación de talento para crear el código de biblioteca de alto rendimiento que sustenta los sistemas modernos de inteligencia artificial.
NVIDIA, por ejemplo, desarrolló algunas de las bibliotecas de computación de alto rendimiento (HPC) más avanzadas, creando una ventaja competitiva que ha resultado difícil de superar para otros.
Pero ¿qué pasaría si un par de estudiantes, en pocos meses, pudieran competir con bibliotecas de HPC de vanguardia con unos pocos cientos de líneas de código, en lugar de decenas o cientos de miles?
Eso es lo que han demostrado investigadores del Laboratorio de Ciencias de la Computación e Inteligencia Artificial (CSAIL) del MIT con un nuevo lenguaje de programación llamado Exo 2.
Exo 2 pertenece a una nueva categoría de lenguajes de programación que el profesor del MIT Jonathan Ragan-Kelley denomina “lenguajes programables por el usuario” (USL).
En lugar de esperar que un compilador opaco genere automáticamente el código más rápido posible, las USL otorgan a los programadores el control total, permitiéndoles escribir “programaciones” que controlan explícitamente cómo el compilador genera código.
Esto permite a los ingenieros de rendimiento transformar programas simples que especifican qué se desea calcular en programas complejos que hacen lo mismo que la especificación original, pero mucho más rápido.
Una de las limitaciones de las USL existentes (como la Exo original) es su conjunto relativamente fijo de operaciones de programación, lo que dificulta la reutilización del código de programación en diferentes “núcleos” (los componentes individuales de una biblioteca de alto rendimiento).
En cambio, Exo 2 permite a los usuarios definir nuevas operaciones de programación externamente al compilador, lo que facilita la creación de bibliotecas de programación reutilizables.
La autora principal, Yuka Ikarashi, doctora del MIT, afirma que Exo 2 puede reducir el código total de programación en un factor de 100 y ofrecer un rendimiento competitivo con implementaciones de vanguardia en diversas plataformas, incluyendo los Subprogramas de Álgebra Lineal Básica (BLAS) que impulsan numerosas aplicaciones de aprendizaje automático.
Esto lo convierte en una opción atractiva para ingenieros de HPC enfocados en optimizar kernels en diferentes operaciones, tipos de datos y arquitecturas de destino.
“Se trata de un enfoque ascendente para la automatización, en lugar de realizar una búsqueda de ML/IA sobre código de alto rendimiento“, afirma Ikarashi.
“Esto significa que los ingenieros de rendimiento y los implementadores de hardware pueden escribir su propia biblioteca de programación, que consiste en un conjunto de técnicas de optimización para aplicar en su hardware y alcanzar el máximo rendimiento”.
Una de las principales ventajas de Exo 2 es que reduce la cantidad de esfuerzo de codificación necesario en cualquier momento al reutilizar el código de programación en diferentes aplicaciones y destinos de hardware.
Los investigadores implementaron una biblioteca de programación con aproximadamente 2000 líneas de código en Exo 2, que encapsula optimizaciones reutilizables específicas para álgebra lineal y para cada objetivo (aceleradores de hardware AVX512, AVX2, Neon y Gemmini).
Esta biblioteca consolida los esfuerzos de programación en más de 80 núcleos de alto rendimiento con hasta una docena de líneas de código cada uno, ofreciendo un rendimiento comparable o superior al de MKL, OpenBLAS, BLIS y Halide.
Exo 2 incluye un novedoso mecanismo llamado “Cursores” que proporciona lo que denominan una “referencia estable” para apuntar al código objeto durante todo el proceso de programación.
Ikarashi afirma que una referencia estable es esencial para que los usuarios encapsulen programaciones dentro de una función de biblioteca, ya que renderiza el código de programación de forma independiente de las transformaciones del código objeto.
“Creemos que las USL deberían diseñarse para que sean extensibles por el usuario, en lugar de tener un conjunto fijo de operaciones“, afirma Ikarashi.
De esta manera, un lenguaje puede crecer para soportar grandes proyectos mediante la implementación de bibliotecas que se adaptan a diversos requisitos de optimización y dominios de aplicación.
El diseño de Exo 2 permite a los ingenieros de rendimiento centrarse en estrategias de optimización de alto nivel, a la vez que garantiza que el código objeto subyacente mantenga la equivalencia funcional mediante el uso de primitivas seguras.
En el futuro, el equipo espera ampliar la compatibilidad de Exo 2 con diferentes tipos de aceleradores de hardware, como las GPU.
Varios proyectos en curso buscan mejorar el análisis del compilador en términos de corrección, tiempo de compilación y expresividad.
Fuente: arXiv
Investigadores han diseñado grupos de robots que se comportan como materiales inteligentes con forma y…
El níquel parece tener un futuro brillante en las baterías de vehículos eléctricos: Es más…
Cuando la computación cuántica despegue definitivamente, hará viables tareas que hoy resultan inabordables incluso para…
El nuevo Huawei Pura X es diferente a todo lo que ha visto hasta ahora.…
NVIDIA presentó sus nuevos supercomputadores DGX Spark y DGX Station diseñados para el desarrollo de…
Un hospital que desee utilizar un servicio de computación en la nube para realizar análisis…