1

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

感谢您的回答!

编辑:

你好。我尝试拉分支并用 CMAKE 构建它。但我在用它编译卤化物时遇到问题:

这是 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.

有小费吗?

4

1 回答 1

2

很简短的回答...

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

获取一段卤化物代码并删除所有预先存在的调度。(目前我一般使用#if 0 来执行此操作,但是在使用生成器时会有更好的方法来在显式调度和自动调度之间进行选择。在 C++ 代码中使用带有参数的 if 语句也是一个不错的方法。)

获取所有输出Funcs并调用该Func::estimate方法以给出这些输出的近似范围。(自动调度器可以使用估计值作为最小值,但是可以通过向量化引入约束。)

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

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

于 2016-10-17T21:30:23.690 回答