If statement 卤化物选择语句的问题

If statement 卤化物选择语句的问题,if-statement,select,halide,If Statement,Select,Halide,我想用卤化物做一些模板计算。假设一个基本的5点2D模板,为了计算单元i,j的一些值,我需要i-1,j i-2,j,i+1,j i+2,j的值。现在C++中的方法是,我有一个for语句: for(int i = 2; i < max_i - 2; i++) for(int j = 2; j < max_j - 2; j++) Calculate out = some_function_of(in(i,j), in(i-1,j), in(i-2,j), in(i+1,j), in(i+2

我想用卤化物做一些模板计算。假设一个基本的5点2D模板,为了计算单元i,j的一些值,我需要i-1,j i-2,j,i+1,j i+2,j的值。现在C++中的方法是,我有一个for语句:

for(int i = 2; i < max_i - 2; i++)
for(int j = 2; j < max_j - 2; j++)
Calculate out = some_function_of(in(i,j), in(i-1,j), in(i-2,j), in(i+1,j), in(i+2,j))
for(int i=2;i
现在我正试图用卤化物做同样的事情。因此,我有一个缓冲区,它和C++代码中的输入数组具有相同的值。我有一个Func,叫做:

out(i,j)=选择(i>=2&&j>=2,一些函数(in(i,j),in(i-1,j),in(i-2,j),in(i+1,j),in(i+2,j)),0.0f)

当我运行此代码时,出现以下错误:

错误: 在-1处访问输入缓冲区b0,该位置在维度0中的最小值(0)之前 中止(堆芯转储)

据我所知,此错误的原因是select语句对这两个语句求值,因此即使我不想计算任何小于2的I和j值,函数的求值也是在I=0和j=0,因此访问地址无效


那么在卤化物中有没有这样做的方法?if/else语句还有其他等价物吗?

使用边界条件可以满足您的要求:

Func无界;
无界(i,j)=(in(i,j),in(i-1,j),in(i-2,j),in(i+1,j),in(i+2,j))的一些函数;
out(i,j)=边界条件::常数_外部(无界,0.0f,2,宽度-4,2,高度-4)(i,j);

我相信如果你想要最大的无限制,你可以使用“Expr()”而不是“width-4”或“height-4”


use if BoundaryConditions函数允许提示编译器if/else构造的哪个方向更可能。

使用边界条件将实现您想要的:

Func无界;
无界(i,j)=(in(i,j),in(i-1,j),in(i-2,j),in(i+1,j),in(i+2,j))的一些函数;
out(i,j)=边界条件::常数_外部(无界,0.0f,2,宽度-4,2,高度-4)(i,j);

我相信如果你想要最大的无限制,你可以使用“Expr()”而不是“width-4”或“height-4”

use if BoundaryConditions函数允许提示编译器if/else构造的哪个方向更可能