我一直在尝试在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.

有小费吗?

最佳答案

非常简短的答案...

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

编写一段Halide代码,并删除所有预先存在的调度。 (目前,我通常使用#if 0进行此操作,但是使用Generators时,会有更好的方法在显式调度和自动调度之间进行选择。在C++代码中使用带参数的if语句也是一种不错的选择。)

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

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

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

关于c++ - Halide 如何自动调整时间表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40089768/

10-11 15:16