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