我是 Halide 的新手。
我正在尝试进行一些计算,其中应将像素位置“x”设置为 for 循环的限制。为此,我编写了以下代码,但似乎我不能使用 halide 变量作为 for 循环的限制。
有解决办法吗?
我的代码:
Halide::Var x, y;
Halide::Expr L;
Halide::Func mat,A;
L = 0;
for (int k=1; k<=x-1; k++)
L += mat(k,y) * mat(k,x);
mat(x,y) = Halide::select(x==y, (A(x, y) - L),
y>x, (A(x,y) - L)/mat(x,x),
0);
它给出了错误信息:
"error: could not convert ‘Halide::operator<=(int, Halide::Expr) Halide::operator-(Halide::Expr, int)(1))’ from ‘Halide::Expr’ to ‘bool’ for (int k=1; k<=x-1; k++)"
最佳答案
Halide::Expr
和 Halide::Var
在 C++ 编译时没有明确的值;它们是在生成的 Halide 代码中表示的值的占位符。因此,您不能在 C++ for
循环中使用它们。 Halide 中的等效项是使用 RDom
来指定明确的范围,例如,
Halide::RDom k(1, x-1); // RDom is [min, extent], not [min, max]
Halide::Expr L;
L = 0;
L += mat(k,y) * mat(k,x);
或者,更简单地说,
Halide::RDom k(1, x-1); // RDom is [min, extent], not [min, max]
Halide::Expr L = Halide::sum(mat(k,y) * mat(k,x));
关于c++ - 我如何使用像素位置 'x' (Halide::Var) 值作为 for 循环的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713651/