---
title: Autotuner调优流程
description: "调优流程（如图一所示）由两个阶段组成：初始编译阶段 （initial compilation）和调优阶段 （tuning process）。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_20_0005.html
sourcePath: /source/zh/kunpengdevps/compilation/ug-bisheng/kunpengbisheng_20_0005.html
indexId: 3020661f86f9b8efa90498efd89e36e17c0925e2919f487151c8dbeb23c6f16274
---
# Autotuner调优流程

调优流程（如图一所示）由两个阶段组成：初始编译阶段 （initial compilation）和调优阶段 （tuning process）。

图1 Autotuner调优流程


#### 初始编译阶段

初始编译阶段发生在调优开始之前，Autotuner首先会让编译器对目标程序代码做一次编译，在编译的过程中，毕昇编译器会生成一些包含所有可调优结构的YAML文件，告诉我们在这个目标程序中哪些结构可以用来调优，比如文件（module），函数（function），循环（loop）。 例如，循环展开是编译器中最常见的优化方法之一，它通过多次复制循环体代码，达到增大指令调度的空间，减少循环分支指令的开销等优化效果。若以循环展开次数（unroll factor）为对象进行调优，编译器会在YAML文件中生成所有可被循环展开的循环作为可调优结构。


#### 调优阶段

当可调优结构顺利生成之后，调优阶段便会开始：

1. Autotuner首先读取生成好的可调优结构的YAML文件，从而产生对应的搜索空间，也就是生成针对每个可调优代码结构的具体的参数和范围；
2. 调优阶段会根据设定的搜索算法尝试一组参数的值，生成一个YAML格式的编译配置文件（compilation config），从而让编译器编译目标程序代码产生二进制文件；
3. 最后Autotuner将编译好的文件以用户定义的方式运行并取得性能信息作为反馈；
4. 经过一定数量的迭代之后，Autotuner将找出最终的最优配置，生成最优编译配置文件，以YAML的形式储存。
