手动优化循环嵌套需要大量工程投入。开发者需要选择具体的瓦片大小、向量长度和展开因子,以最大限度地发挥硬件性能。然而,最佳配置会依据目标硬件架构而定。在服务器级GPU上表现良好的调度,常常在移动CPU或边缘加速器上产生不佳的效果。为解决此问题,现代机器学习编译器采用自动调优策略,将优化视为一个搜索问题。本章考察如何自动化选择高效的循环调度。我们首先定义搜索空间,它代表着某个操作符的所有有效代码变换的集合。如果一个操作符涉及一个大小为 $N$ 的循环,我们希望将其拆分为大小为 $T$ 的瓦片,搜索空间会包含 $N$ 的所有有效除数。你将看到成本模型如何评估这些候选方案,以预测性能,无需在物理硬件上完全运行每个变体。接下来将讲到处理这些搜索空间的具体算法。我们将考察编译器如何运用统计方法和机器学习模型来预测调度方案的性能,有效地引导搜索找到最优参数,比随机抽样更有效率。最后,我们讲解代码生成阶段。一旦选定最佳调度,编译器必须将高级中间表示 (IR) 转换为可执行指令。我们将分析后端如何将IR降低为低级格式,例如用于CPU目标的LLVM IR或用于NVIDIA GPU的CUDA源代码。在本节结束时,你将能够配置自动化调优会话,并检查生成的机器代码生成流水线。