趋近智
当高级框架将模型降级为中间表示 (IR) 后,由此产生的计算图表示了操作的逻辑流程。然而,将此图直接翻译成机器码通常会导致次优的性能。将每个节点作为单独的核(kernel)执行会引入大量的调度开销,并对内存带宽造成不必要的负担。本章侧重于在编译器生成具体的硬件指令之前,优化此图的结构。
这里的首要目标是减少内存访问和核(kernel)启动的次数。例如,执行像如下的操作:
如果作为两个不同的核(kernel)执行,则需要将 的结果写入全局内存,然后立即将其读回以进行激活函数 (activation function)运算。通过应用图级转换,编译器可以将这些操作融合成一个核(kernel),将中间数据保留在寄存器或缓存中。
您将学到如何实现具体的优化流程,例如算子融合(operator fusion),它将兼容的节点合并以提高局部性。本文档还包含代数简化(algebraic simplification),它借助数学属性用更廉价的替代方案替换开销大的操作。我们将审视布局转换(layout transformations),确保张量以 或 等内存格式存储,这些格式与目标硬件的访问模式一致。最后,本章讲述了通用清理流程,例如死代码消除(DCE)和公共子表达式消除(CSE),以确保图只包含必要的计算。
2.1 算子融合策略
2.2 代数简化
2.3 布局转换
2.4 死代码消除与公共子表达式消除
2.5 动手实践:实现融合遍