Halide如何自动调整时间表

时间:2016-10-17 15:01:55

标签: c++ halide

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

感谢您的回答!

编辑:

您好。我尝试用CMAKE拉分支并构建它。但我有问题用它编译Halide:

这是VS 2015中的错误:

4>  D:/halideAutoScheduler2/Halide.build/Release\initmod.aarch64_cpu_features_32.ll -> D:/halideAutoScheduler2/Halide.build/Release\initmod.aarch64_cpu_features_32.bc
4>  C:\Program Files (x86)\LLVM\bin\llvm-as.exe: D:/halideAutoScheduler2/Halide.build/Release\initmod.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)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets(171,5): error MSB6006: "cmd.exe" exited with code 1.

任何提示?

1 个答案:

答案 0 :(得分:2)

非常简短的回答......

拉出这个分支:https://github.com/halide/Halide/tree/auto_scheduler

获取一段Halide代码并删除所有预先存在的调度。 (我通常使用#if 0来做这件事,但是在使用Generators时会有更好的方法在显式调度和自动调度之间进行选择。在C ++代码中使用带有参数的if语句也是一种很好的方法。)< / p>

获取所有输出Funcs并调用Func::estimate方法为这些输出提供近似边界。 (自动调度程序可以将估计值作为最小值使用,因此可以通过向量化引入约束。)

然后确保您拥有Pipeline,而不是Func,并调用auto_schedule方法。 (Pipeline可以构建Func。{} Pipeline可以通过realize运行,也可以通过compile_to_file或类似方式进行编译。

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