1

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

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

  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(...) = ...
4

1 回答 1

1

这是 print_loop_nest 令人困惑的情况。x 上的内部循环的大小为 1,因此它消失了。编译的循环嵌套是您想要的。x 上的外部循环是不平凡的,所以这就是真正发生的事情:

produce f:
  for x:
    produce sum:
      sum(...) = ...
      for r4:
        sum(...) = ...
    consume sum:
      f(...) = ...
于 2017-01-17T02:21:27.680 回答