卤化物总和循环嵌套

Halide sum loops nesting

Halide::sum 的打印循环嵌套并不等同于 tutorial 中所写的最优。

此代码为零初始化和求和提供了单独的循环。

  Halide::Func f("f");
  Halide::Var x("x");
  Halide::RDom r(0, 3);

  f(x) = Halide::sum(r + x);
  f.print_loop_nest();

  f.realize(10);

输出:

produce f:
  for x:
    produce sum:
      for x:
        sum(...) = ...
      for x:
        for r4:
          sum(...) = ...
    consume sum:
      f(...) = ...

可以融合这个循环还是不影响性能?谢谢!


更新: 像这样熔断:

produce f:
  for x:
    produce sum:
      for x:
        sum(...) = ...
        for r4:
          sum(...) = ...
    consume sum:
      f(...) = ...

这是 print_loop_nest 令人困惑的情况。 x 上的内部循环的大小为 1,因此它消失了。编译循环嵌套就是你想要的那个。 x 的外层循环是 non-trivial 循环,所以这才是真正发生的事情:

produce f:
  for x:
    produce sum:
      sum(...) = ...
      for r4:
        sum(...) = ...
    consume sum:
      f(...) = ...