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

标签 c++ halide

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

相关文章:

c++ - 在 Ubuntu 12.04 上运行一个在 Windows 上的 MS Visual Studio 中用 c++11 编写的项目

c++ long 到 double 的可移植转换

Linux 上的 Halide/Hexagon 支持

c - Halide 与 OpenVX

c++ - 在 iOS 上将 Halide 提前 (AOT) 与 Metal 结合使用

image-processing - 推荐的方式来分发 Halide 生成的函数?

c++ - Clang/GCC 真的支持延迟加载功能吗?

c++ - VK_TAB 在我的 C++ 程序中的 SendInput() 中不起作用

c++ - gcc 中的 -O2 和 -fPIC 选项

c++ - Halide:将 C++ 函数传递给 Halide Func