加快时间表的编制和基准测试

Speed up compilation and bench-marking of schedules

我正在制作一个程序,用于对特定算法生成的大量计划进行基准测试。但这会花费很多时间,主要是因为要编制每个时间表。我想知道是否有任何方法可以加快这个过程。

例如使用 AOT 编译或生成器,但我不认为在生成器创建后可以给它不同的调度? (例如,将时间表作为输入参数。)

或者是否有任何可以显着加快速度的编译器标志?

但是我也看到在自动调度程序中使用成本模型来预测调度的执行时间,这将解决我的问题。但是我不知道是否可以或如何在我自己的程序中使用此成本模型,以及它是否仅适用于自动计划程序生成的计划或每个计划。

很遗憾,没有很好的答案。大部分编译时间都在 Halide 降低和 LLVM 中,这必须针对每个计划单独完成,因此仅重用 Generator 对您没有帮助。您可以在布尔输入参数上使用 Func::specialize 以在运行时在计划之间切换,但相对于单独编译选项而言,这不会为您节省太多编译时间。

自动调度程序中的成本模型特定于它所探索的 Halide 时间表子空间的表示,并且不适用于任意 Halide 时间表。

有一个技巧可能会有所帮助:如果您的算法又长又复杂,并且您知道某些 compute_roots 应该在哪里(例如,conv 层之前的最后一件事),那么您可以打破你的算法分为多个部分并独立搜索每个部分的时间表。编译较小的算法速度稍快,但更重要的是,这将使整体搜索在需要获取的样本数量方面更加高效。