Halide如何自动调谐时间表

Halide how to autotune schedule

本文关键字:时间表 何自动 Halide      更新时间:2023-10-16

我在Halide编写代码已经有一段时间了,我总是自己编写时间表。然后我读了这篇论文:http://graphics.cs.cmu.edu/projects/halidesched/mullapudi16_halidesched.pdf.所以,据我所知,有一些方法可以生成最佳时间表。我怎么可能做到这一点?

谢谢你的回答!

编辑:

你好。我试着拔出树枝,用CMAKE建造它。但我在编译Halide时遇到了问题:

这是VS 2015:中的错误

4>  D:/halideAutoScheduler2/Halide.build/Releaseinitmod.aarch64_cpu_features_32.ll -> D:/halideAutoScheduler2/Halide.build/Releaseinitmod.aarch64_cpu_features_32.bc
4>  C:Program Files (x86)LLVMbinllvm-as.exe: D:/halideAutoScheduler2/Halide.build/Releaseinitmod.aarch64_cpu_features_32.ll:23:6: error: expected type
4>  !0 = !{!"clang version 3.6.0 (tags/RELEASE_360/final)"}
4>       ^
4>C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V140Microsoft.CppCommon.targets(171,5): error MSB6006: "cmd.exe" exited with code 1.

有什么建议吗?

非常简短的回答。。。

拉动此分支:https://github.com/halide/Halide/tree/auto_scheduler

取一段Halide代码,删除所有预先存在的调度。(目前我通常使用#if0来完成这项工作,但在使用Generators时,有一种更好的方法可以在显式调度和自动调度之间进行选择。在C++代码中使用带参数的if语句也是一种很好的方法。(

取所有输出Funcs,并调用Func::estimate方法来给出这些输出的近似边界。(然而,自动调度器可以使用该估计作为最小值,因此可以通过矢量化引入约束。(

然后确保您有一个Pipeline,而不是Func,并调用auto_schedule方法。(Pipeline可以由Func构造。(然后Pipeline可以通过realize运行或通过compile_to_file或类似的方式编译。

一些调度可以与自动调度程序混合使用,例如断言跨步和扩展。但是,如果已经应用了任何复杂的调度,则自动调度程序可能会断言。