gpt4 book ai didi

c++ - 我如何使用像素位置 'x' (Halide::Var) 值作为 for 循环的限制?

转载 作者:行者123 更新时间:2023-11-30 04:44:31 25 4
gpt4 key购买 nike

我是 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::ExprHalide::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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com