Halide Func重塑

时间:2017-11-16 09:25:00

标签: halide

我想转换Halide Func的尺寸。例如,考虑以下内容,
func1(x, y, z) = some operation
我知道函数的每个维度的范围。让我们假设他们是 x = [0,3],y = [0,3],z = [0,15] 现在如果我想将func转换为1维,就像这样 flatten(z * 16 + y * 4 + x) = func1(x, y, z)
但是上面的定义无效,因为函数定义没有纯Var。无论如何我可以在Halide做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您需要将其表达为一个变量的纯函数,例如:

flatten(x) = func1(x % 4, (x % 16) / 4, x / 16);

您可以通过适当地调整flatten来简化大部分添加的寻址算法,例如:

// Require the bounds realized to be a multiple of 16.
flatten.align_bounds(x, 16);

// Split the loops at the "critical points" of the addressing arithmetic.
flatten
    .unroll(x, 4, TailStrategy::RoundUp)
    .split(x, xo, xi, 4, TailStrategy::RoundUp);