MLIR ( Multi-Level Intermediate Representation) est un framework unificateur pour le développement de compilateurs[1]. La technologie MLIR permet d'utiliser de manière optimale et unifiée une variété de plates-formes informatiques telles que les processeurs (CPU), les processeurs graphiques (GPU), les unités de traitement de données (DPU (en)), les unités de traitement de tenseurs (TPU), les circuits logiques programmables (FPGA), des intelligences artificielles (IA) et les processeurs quantique (QPU)[2].

MLIR
Description de l'image MLIR Logo.svg.

Informations
Développé par LLVM Developer Group
Écrit en C++
Système d'exploitation Multiplateforme
Type Compilateur
Site web mlir.llvm.org

MLIR est un sous-projet du projet LLVM et vise à construire une « infrastructure de compilateur réutilisable et extensible (..) ainsi qu'à aider à connecter les compilateurs existants entre eux. »[3],[4],[5] MLIR n'a pas vocation à être compilé ou exécuté. C'est simplement une représentation de code qui vise à être le même format pour tous les codes afin de simplifier la lecture de ceux-ci.

Le nom du projet signifie Multi-Level Intermediate Representation, dans lequel le mot-clé multi-level fait référence à la possibilité de définir plusieurs dialectes et de conversions progressives vers du code machine. Cette capacité permet au MLIR de conserver les informations à un niveau d'abstraction plus élevé et d'effectuer des analyses et des transformations plus précises, qui autrement devraient traiter des représentations de niveau inférieur[6].

Dialectes

modifier

Les opérations représentent l’élément central autour duquel les dialectes sont construits. Elles sont identifiées par un nom – qui doit être unique dans le dialecte auquel ils appartiennent – et comportent facultativement des opérandes, des résultats, des attributs et des régions. Les opérandes et les résultats sont des formes statiques à affectation unique (SSA). Chaque résultat est également associé à un type. Les attributs représentent les connaissances au moment de la compilation. Les régions consistent en une liste de blocs, chacun pouvant avoir des arguments d'entrée et contenir une liste d'opérations[7].

Applications

modifier

La liberté de modélisation des représentations intermédiaires permet à MLIR d'être utilisé dans un large éventail de scénarios. Cela inclut les langages de programmation traditionnels[8], mais aussi la synthèse de haut niveau (en)[9],[10], l'informatique quantique[11] et le chiffrement homomorphe[12],[13],[14]. Les applications d'apprentissage automatique tirent également parti des dialectes ciblant les accélérateurs et autres systèmes hétérogènes[15],[16].

Notes et références

modifier
  1. Alfred V. Aho, Ravi Sethi et Jeffrey D. Ullman, Compilers: principles, techniques, and tools, Reading, Mass., Reprinted, with corr., [36. Druck], coll. « Addison-Wesley series in computer science », (ISBN 978-0-201-10088-4)
  2. (en) « Why Mojo🔥 | Modular Docs », sur docs.modular.com (consulté le )
  3. « The LLVM Compiler Infrastructure », LLVM (consulté le ) : « The MLIR subproject is a novel approach to building reusable and extensible compiler infrastructure. MLIR aims to address software fragmentation, improve compilation for heterogeneous hardware, significantly reduce the cost of building domain specific compilers, and aid in connecting existing compilers together. »
  4. Chris Lattner et Mehdi Amini « 2021 IEEE/ACM International Symposium on Code Generation and Optimization (CGO) » () (DOI 10.1109/CGO51591.2021.9370308)
  5. (en) Mernik, Heering et Sloane, « When and how to develop domain-specific languages », ACM Computing Surveys, vol. 37, no 4,‎ , p. 316–344 (ISSN 0360-0300, DOI 10.1145/1118890.1118892, S2CID 207158373, lire en ligne)
  6. (en) Seidl, Helmut; Wilhelm, Reinhard; Hack, Sebastian, Compiler design: analysis and transformation., (ISBN 978-3-642-17548-0)
  7. « MLIR Language Reference - MLIR », sur mlir.llvm.org (consulté le )
  8. (en) Moses, William S.; Chelini, Lorenzo; Zhao, Ruizhe; Zinenko, Oleksandr, Polygeist: Raising C to Polyhedral MLIR, (ISBN 978-1-6654-4278-7, lire en ligne)
  9. (en) Agostini, Nicolas Bohm; Curzel, Serena; Amatya, Vinay; Tan, Cheng; Minutoli, Marco; Castellana, Vito Giovanni; Manzano, Joseph; Kaeli, David; Tumeo, Antonino, An MLIR-based Compiler Flow for System-Level Design and Hardware Acceleration, (ISBN 978-1-4503-9217-4, lire en ligne)
  10. (en) Ruizhe, Zhao; Jianyi, Cheng, Phism: Polyhedral High-Level Synthesis in MLIR, (arXiv 2103.15103, lire en ligne)
  11. (en) McCaskey, Alexander; Nguyen, Thien, A MLIR Dialect for Quantum Assembly Languages, (ISBN 978-1-6654-1691-7, lire en ligne)
  12. (en) Park, Sunjae; Song, Woosung; Nam, Seunghyeon; Kim, Hyeongyu; Shin, Junbum; Lee, Juneyoung, HEaaN.MLIR: An Optimizing Compiler for Fast Ring-Based Homomorphic Encryption, (ISSN 2475-1421, lire en ligne)
  13. (en) Govindarajan, Sanath; Moses, William S, SyFER-MLIR: Integrating Fully Homomorphic Encryption Into the MLIR Compiler Framework (lire en ligne)
  14. google/heir, Google, (lire en ligne)
  15. (en) Pienaar, Jacques, MLIR in TensorFlow Ecosystem (lire en ligne)
  16. (en) atel, Navdeep; Khandelwal, Vivek; Bondhugula, Uday, Proceedings of the 31st ACM SIGPLAN International Conference on Compiler Construction (ISBN 978-1-4503-9183-2, lire en ligne)