2017-01-16 72 views
1

嵌套在Halide :: sum上的印刷循环与在tutorial中编写的最佳版本不同等。Halide sum loops嵌套

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

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

回答

1

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

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

Andrew,谢谢!现在我懂了。 –