趋近智
图级转换主要用于减少算子启动的开销以及管理它们之间内存的负担。但是,大部分执行时间都花费在算子本身内部。这些内核通常由执行线性代数运算的密集嵌套循环组成。将数学逻辑直接转换为代码,常常因为缓存使用效率不高和指令级并行性未被充分发挥,导致性能达不到最佳。
本章侧重于循环优化的机制。我们区分计算(程序算什么)与调度(程序怎么执行)。例如,矩阵乘法在数学上可以这样定义:
尽管结果保持不变,但处理器遍历、和的顺序会极大地影响吞吐量 (throughput)。您将学习如何调整这些循环嵌套,以适应底层硬件架构。
我们将考察几种具体的调度原语,例如:
通过应用这些技术,您将可以把一个通用但运行缓慢的实现转变为高性能内核。这个过程构成了编译器将抽象张量操作映射到具体机器码的工程依据。
3.1 循环优化空间
3.2 循环分块与块化
3.3 向量化与SIMD
3.4 循环重排与展开
3.5 动手实践:优化矩阵乘法