输入“/”快速插入内容

ISA & intrinsic Designs

3月21日修改
2024年3月17日创建
1235
1340
务虚讨论
IR 的比较
不同的硬件喜欢不同的指令流。
IR 没有好坏,但对整个上层的生态系统产生深远影响。场景不同,tradeoff 也不同。
IR 的 3 种形态,LLVM IR 都支持,还能高效的相互转换。
1.
in-memory form:高效分析和变换
2.
bytecode form:存储和交换
3.
textural form:阅读和纠错
IR
要点
特点,优缺点
LLVM IR
使用控制流 (control flow)、基础块 (basic block)、以及静态单赋值 (SSA) 形式来表示程序。
这种表示是完备的,LLVM 从而可以独立于其他表示形态,实现作为前后端之间的单一桥梁。 这就完全地解绑了编译器的前后端。
更侧重于编译器内部使用,核心是高效的内存表示并提供相对较弱的兼容性以便于迭代改进。
最初发布于 2003 年。
1.
用文本表示将 UNIX 哲学带入了编译器
2.
LLVM 并不对稳定性和兼容性提供强保障
3.
LLVM IR 本身也是不可分割的中心化中间表示
4.
LLVM IR 在整个 LLVM 生态中处于中心地位。双刃剑。对 LLVM IR 的局部小修改也会带来意想不到的间接效应。很难高效推动所有利益方的同意。
SPIR-V
设计为硬件驱动的输入程序表示
Standard Portable Intermediate Representation (SPIR)
1.
稳定的字节码。注重于字节码的高效处理并提供强兼容性。
2.
GPU 领域专用。着眼于 GPU 领域的行业标准规范
是为表示 OpenCL 设备程序 (kernel) 而设计的,它锁定了某一版本的 LLVM IR,使用 LLVM 内联函数 (intrinsic) 和元数据 (metadata) 来定义 OpenCL 的计算原语以及定义。
GPU Driver & Runtime
最初发布于 2015 年
1.
有技术上的机制和组织上的流程来维持其可扩展性
2.
有着稳定的字节码和兼容性保障