MLIR:LLVM总览

文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。

Multi-Level Intermediate Representation(MLIR)是创建可重用、可扩展编译器基础设施的新途径。本文为第 6 期,在对 MLIR 有了基本认识后,总览所有的重要概念。编辑自MLIR:Glossary.

转载请注明出处!

本文介绍 MLIR 项目的父项目—— LLVM 项目。

由来

LLVM 的名字最初由 Low Level Virtual Machine (底层虚拟机)而来,但现在已然成为一个模块化、可重用的编译工具集合。(所以它现在完全是独立出道,不再作为缩写被解释。)

LLVM 项目最初由伊利诺伊大学的 Chris Lattner 主持,该作者也是 MLIR 项目的主导者。它最初的目标是提供一种现代的、基于SSA的编译策略,它能够支持任意编程语言的静态和动态编译。

巨大优势:宽松的许可证

从 LLVM 的各种介绍中不难发现,它根据”Apache 2.0 License with LLVM exceptions”进行许可的同时,处处尽力避免和 GNU GCC 工具链之间的许可差异化。

这便是使用 LLVM 的巨大优势,因为这使得 LLVM 可以被作为商业软件的一部分闭源

关于版本

LLVM 项目采用“每年发布两个稳定版本”的策略,当前最新发行版版本为 15,开发版大版本 为 16.

主要子项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.
├── **bolt**
├── **clang**
├── **clang-tools-extra**
├── cmake
├── **compiler-rt**
├── cross-project-tests
├── flang
├── libc
├── **libclc**
├── **libcxx**
├── **libcxxabi**
├── libunwind
├── **lld**
├── **lldb**
├── **llvm**
├── llvm-libgcc
├── **mlir**
├── **openmp**
├── **polly**
├── pstl
├── runtimes
├── third-party
└── utils

通过 LLVM 项目的目录结构可以看出其主要子项目。

LLVM

狭义上的 LLVM 一般指 LLVM Core。

围绕 LLVM IR,它提供了一个独立于源代码和目标机器码的优化器,同时支持市面上大多数的 CPU 提供代码生成。

这大大降低了新的语言的开发工作量。

Clang

C/C++/Objective-C 编译器前端,可以将代码转换为 LLVM IR。这种前后端分离的设计同样有别于 GNU GCC。

clang-tools-extra,它还提供了 clang-format、clang-tidy 等一系列代码整理、检查、解析的工具,为编译前的 bug 查找提供了极大的便利。

LLDB

LLDB 是基于 LLVM 和 Clang 的调试器。相较于 GDB,它更快、更省资源。

libcxx/libcxxabi

libc++/libc++ ABI 提供了 C++ 标准库的一致性、高性能实现,被设计用作 GNU libstdc++ 的替代品,是用 Clang++ 构建可执行文件所使用的运行时的一部分。

迫于 libstdc++ 的新的 GPLv3 许可的原因,它目前仅支持 C++11、C++14.

Compiler-RT

compiler-rt 提供了特定硬件不支持功能的底层代码生成支持,例如使用 32 位指令实现 64 位运算。

它还为动态测试工具(如AddressSanitizer、ThreadSanitizer、MemorySanitizer和DataFlowSanitizer)提供了运行时库的实现。

MLIR

MLIR 项目是创建可重用、可扩展编译器基础设施的新途径。其目标是解决软件碎片化问题,改进异构硬件上编译,显著降低构建特定领域编译器的开销,并帮助复用现有的编译器。

OpenMP

提供 Clang 中的 OpenMP 实现。

简单讲,就是为 Clang 提供了程序并行化的接口。

polly

polly 项目使用多面体模型实现了一些优化:缓存局部性优化、自动并行化、自动向量化。

libclc

目标是实现 OpenCL 标准库

LLD

新的链接器,有极大的速度提升。

我今天的一个项目从原有的分钟级缩短到了秒级。

BOLT

链接后优化器。它通过性能分析,改变程序代码布局,从而实现程序性能改进。

都看到这儿了,不如关注每日推送的“科文路”、互动起来~

至少点个赞再走吧~

Author

xlindo

Posted on

2022-10-13

Updated on

2023-05-10

Licensed under

Comments