在生成器中的特定域上执行Func

时间:2017-05-04 13:27:12

标签: halide

我有这个示例生成器用黑色填充区域(0,0,100,100):

class MyGen : public Generator<MyGen>
{
public:
    Var x, y;
    Output<Func> output { "output", Int(32), 2 };

    void generate()
    {
        output(x, y) = x + y;
        RDom dom = RDom(0, 100, 0, 100);
        output(dom.x, dom.y) = 0;
    }

    void schedule()
    {
    }
};

区域填充正确,但由于纯粹的定义,图像的其余部分是渐变(x + y)。

有没有办法编写一个不会执行的纯定义(例如output(x,y)= output(x,y))?

我可以在特定域(例如定义区域的Func)上执行Input<int>而不会影响图像的其余部分吗?

1 个答案:

答案 0 :(得分:2)

以下是您编写未执行的纯定义的方法:

output(x, y) = undef<int>();

除了输出之外的其他任何东西都有点危险,因为Halide不会静态检查使用未定义的值。 valgrind是你的朋友。