我有四个功能 A、B、C、DI 希望交错((0,0)是左上角):
A B A B ...
C D C D ...
A B A B ...
C D C D ...
...
所以,我有类似的东西:
Func out; // why can't this be on the same line as the implementation?
out(x, y) = select((x&1)==0,
select((y&1)==0, A(x/2,y/2), C(x/2,y/2)),
select((y&1)==0, B(x/2,y/2), D(x/2,y/2)) );
有没有更好(更有效)的方法来做到这一点?我注意到 A、B、C、D 也包含一些 select()(它们是非常非线性的函数。)
同样,我在 A 内部有这个结构:
Func choose0, choose1, a0, a1, a2, A;
choose0, choose1, a0, a1, a2 = something complicated...;
A(x,y) = select(choose0(x,y), a0(x,y), select(choose1(x,y), a1(x,y), a2(x,y)));
Halide 会在选择之前生成计算 a0、a1 和 a2 的代码吗?我真的宁愿只为(x,y)的任何特定值计算选择的Func。