在生成器中的特定域上执行 Func
Executing Func over a specific domain in generator
我有这个用黑色填充区域 (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))?
我可以在特定域(例如定义区域的 Input<int>
上执行 Func
而不影响图像的其余部分吗?
以下是如何编写未执行的纯定义:
output(x, y) = undef<int>();
虽然对于输出以外的任何东西都有点危险,因为 Halide 不会静态检查未定义值的使用。 valgrind 是你的朋友。
我有这个用黑色填充区域 (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))?
我可以在特定域(例如定义区域的 Input<int>
上执行 Func
而不影响图像的其余部分吗?
以下是如何编写未执行的纯定义:
output(x, y) = undef<int>();
虽然对于输出以外的任何东西都有点危险,因为 Halide 不会静态检查未定义值的使用。 valgrind 是你的朋友。