глоссарий

MLIR

MLIR

MLIR (Multi-Level Intermediate Representation) — это промежуточное представление кода, созданное в проекте LLVM. Проще говоря, MLIR помогает компилятору понимать программу на разных уровнях абстракции: от операции «перемножь матрицы» до отдельных машинных инструкций. Компилятор не прыгает сразу из языка в машинный код, а проходит несколько стадий, используя на каждой своё представление.

Зачем это важно? Современные чипы — это и процессоры, и видеокарты, и нейроускорители, и FPGA. Писать под каждое устройство вручную сложно. MLIR позволяет описывать особенности железа на нужном уровне и переиспользовать общие оптимизации. Особенно это ценно для машинного обучения, где модели запускают на самых разных устройствах.

Интуитивно это похоже на конструктор из кирпичиков разного размера. Крупные — высокоуровневые операции, мелкие — машинные инструкции. Компилятор может взять крупный кирпич, разбить на средние, затем на мелкие, и на каждом шаге применять удобные оптимизации. При этом MLIR не привязан к одному языку: он даёт набор готовых блоков и инструменты для их превращения друг в друга.

Пример: фреймворк TensorFlow использует MLIR, чтобы одна и та же нейросеть работала и на серверных процессорах, и в телефоне. Модель описывают один раз, а MLIR адаптирует её под устройство: где-то включает векторные инструкции, где-то — операции ускорителя.

Итог: MLIR — это гибкий мост между кодом и разным железом, делающий компиляторы проще, а программы быстрее и переносимее.