文章目录
- AI 软件栈后端编译
- LLVM IR
- LLVM的相关子项目
AI 软件栈后端编译
- AI软件栈的后端工作通常与硬件架构直接相关,为了实现一个既能适配现代编程语言、硬件架构发展的目标,所以提出了LLVM
- 具备多阶段优化能力
- 提供基础后端描述,便于进行编译器开发
- 兼容标准编译器的行为
LLVM IR
- LLVM设计了一套底层描述策略(也可以称之为虚拟指令集,LLVM IR),属于低级中间表示,携带了程序的类型信息,即方便了静态编译优化,又可以允许在链接时进行优化。支持编译时、链接时和运行时优化,LLVM IR是关键
- LLVM IR具有一下特点
- 这个IR描述的虚拟架构具有常规处理器的关键操作,并减少了相关约束
- 提供了无线数量的类型化虚拟寄存器,采用SSA的形式便于编译优化
- 提供了特有的指令,显示描述异常控制流信息
- 约定了寄存器与内存的行为方式。例如紧靠load、store进行数据交换,交换时需明确数据类型。内存被区分为全局区域、栈、堆,其中栈和堆的对象分别使用alloca和malloc指令进行空间分配,并通过函数单反毁的指针值来访问相应空间。栈对象在当前函数的栈帧中进行分配,控制流离开函数时自动释放,堆对象必须使用free指令进行显示释放
- LLVM IR继承了运行时和系统函数,例如IO、内存管理和信号量等相关函数。并且提供了文本、二进制和内存三种文件格式便于开发存储和运行
- 最后,LLVM IR还提供了多种PASS参考以及配套的工具集,包括汇编、反汇编、解释器、优化器、编译器和测试套件等