Un nouveau langage de programmation pour l'informatique haute performance, avec beaucoup moins de code

Un nouveau langage de programmation pour l’informatique haute performance, avec beaucoup moins de code

De nombreuses entreprises investissent massivement dans l’embauche de talents pour créer le code de bibliothèque haute performance qui sous-tend les systèmes d’intelligence artificielle modernes. NVIDIA, par exemple, a développé certaines des bibliothèques informatiques (HPC) les plus avancées (HPC), créant un fossé compétitif qui s’est avéré difficile pour les autres de violer.

Mais que se passe-t-il si quelques étudiants, en quelques mois, pouvaient rivaliser avec les bibliothèques HPC de pointe avec quelques centaines de lignes de code, au lieu de dizaines ou de centaines de milliers?

C’est ce que les chercheurs du Laboratoire d’intelligence informatique et d’intelligence artificielle du MIT (CSAIL) ont montré avec un nouveau langage de programmation appelé Exo 2.

EXO 2 appartient à une nouvelle catégorie de langages de programmation que le professeur du MIT Jonathan Ragan-Kelley appelle des « langues logicielles » (USLS). Au lieu d’espérer qu’un compilateur opaque générera automatiquement le code le plus rapide possible, l’USLS place les programmeurs dans le siège du conducteur, ce qui leur permet d’écrire des « horaires » qui contrôlent explicitement comment le compilateur génère du code. Cela permet aux ingénieurs de performance de transformer des programmes simples qui spécifient ce qu’ils veulent calculer en programmes complexes qui font la même chose que la spécification d’origine, mais beaucoup, beaucoup plus rapidement.

L’une des limites des USL existantes (comme l’EXO d’origine) est leur ensemble relativement fixe d’opérations de planification, ce qui rend difficile la réutilisation du code de planification à travers différents « noyaux » (les composants individuels d’une bibliothèque haute performance).

En revanche, EXO 2 permet aux utilisateurs de définir de nouvelles opérations de planification à l’extérieur vers le compilateur, facilitant la création de bibliothèques de planification réutilisables.

L’auteur principal Yuka Ikarashi, un doctorat du MIT. L’étudiant en génie électrique et en informatique et affilié CSAIL, affirme que l’EXO 2 peut réduire le code du calendrier total par un facteur de 100 et livrer des performances compétitives avec des implémentations de pointe sur plusieurs plateformes différentes, y compris les sous-programmes d’algèbre linéaire de base (BLA) qui alimentent de nombreuses applications d’apprentissage automatique. Cela en fait une option attrayante pour les ingénieurs en HPC axés sur l’optimisation des noyaux à travers différentes opérations, types de données et architectures cibles.

« C’est une approche ascendante de l’automatisation, plutôt que de faire une recherche ML / AI sur un code haute performance », explique Ikarashi. « Cela signifie que les ingénieurs de performance et les implémenteurs matériels peuvent écrire leur propre bibliothèque de planification, qui est un ensemble de techniques d’optimisation pour appliquer sur leur matériel pour atteindre les performances de pointe. »

Un avantage majeur de l’EXO 2 est qu’il réduit la quantité d’effort de codage nécessaire à la fois en réutilisant le code de planification entre les applications et les cibles matérielles.

Les chercheurs ont mis en œuvre une bibliothèque de planification avec environ 2 000 lignes de code dans Exo 2, encapsulant des optimisations réutilisables qui sont spécifiques à l’algèbre linéaire et spécifiques à la cible (AVX512, AVX2, néon et accélérateurs de matériel Gemmini). Cette bibliothèque consolide les efforts de planification dans plus de 80 noyaux haute performance avec jusqu’à une douzaine de lignes de code chacune, offrant des performances comparables à, ou mieux que MKL, OpenBLAS, BLIS et HALIDE.

EXO 2 comprend un nouveau mécanisme appelé « curseurs » qui fournit ce qu’ils appellent une « référence stable » pour pointer le code de l’objet tout au long du processus de planification. Ikarashi dit qu’une référence stable est essentielle pour que les utilisateurs puissent encapsuler les planifications dans une fonction de bibliothèque, car il rend le code de planification indépendant des transformations de code d’objet.

« Nous pensons que l’USLS devrait être conçu pour être extensible par l’utilisateur, plutôt que d’avoir un ensemble fixe d’opérations », explique Ikarashi. « De cette façon, une langue peut croître pour soutenir de grands projets grâce à la mise en œuvre de bibliothèques qui répondent aux diverses exigences d’optimisation et aux domaines d’application. »

La conception de l’EXO 2 permet aux ingénieurs de performance de se concentrer sur des stratégies d’optimisation de haut niveau tout en veillant à ce que le code d’objet sous-jacent reste fonctionnellement équivalent grâce à l’utilisation de primitives sûres. À l’avenir, l’équipe espère étendre le support d’EXO 2 pour différents types d’accélérateurs matériels, comme les GPU. Plusieurs projets en cours visent à améliorer l’analyse du compilateur lui-même, en termes d’exactitude, de temps de compilation et d’expressivité.

L’étude est publiée sur le arxiv serveur de préimprimée.