Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Halide 有没有一种方法可以指定在四分之一像素上运行的卤化物计算?_Halide - Fatal编程技术网

Halide 有没有一种方法可以指定在四分之一像素上运行的卤化物计算?

Halide 有没有一种方法可以指定在四分之一像素上运行的卤化物计算?,halide,Halide,在Halide中,是否有方法将输入图像分割为2x2个四分之一像素,并在四分之一像素中的每个像素中实现唯一的计算 例如,我想对四重奏中的每个像素执行以下计算: Upper left: (x + 1, y) + (x - 1, y) + (x, y + 1) + (x, y - 1) Upper right: (x + 1, y) + (x - 1, y) Lower left: (x, y + 1) + (x, y - 1) Lower right: (x - 1, y - 1) + (x + 1

在Halide中,是否有方法将输入图像分割为2x2个四分之一像素,并在四分之一像素中的每个像素中实现唯一的计算

例如,我想对四重奏中的每个像素执行以下计算:

Upper left: (x + 1, y) + (x - 1, y) + (x, y + 1) + (x, y - 1)
Upper right: (x + 1, y) + (x - 1, y)
Lower left: (x, y + 1) + (x, y - 1)
Lower right: (x - 1, y - 1) + (x + 1, y - 1) + (x - 1, y + 1) + (x + 1, y + 1)

我希望这个计算模式能够扩展到整个输入图像。

有很多方法可以做到这一点。您可以使用
x%2==0
y%2==0
上的
select
最直接地执行此操作。比如:

//子术语
Expr ul=in(x+1,y)+in(x-1,y)+in(x,y+1)+in(x,y-1);
Expr-ur=in(x+1,y)+in(x-1,y);
Expr ll=in(x,y+1)+in(x,y-1);
Expr ul=in(x-1,y-1)+in(x+1,y-1)+in(x-1,y+1)+in(x+1,y+1);
Expr ix=x%2==0;
Expr iy=y%2==0;
out(x,y)=选择(iy,
选择(ix、ul、ur),
选择(ix、ll、lr));
(还有一个
select
,您可以将其打包到其中。)

然后,如果将
out
x
y
维度分别展开2,您将在四重奏上获得一个紧密的循环,没有控制流:

out.unroll(x,2).unroll(y,2);
这与你在去马赛克算法中看到的模式非常相似,你可以在官方卤化物参考应用程序中找到一种。受此启发,您可能会发现将数据从二维打包到三维是很自然的,三维是四重奏的4个元素:

压缩(x,y,c)=in(x+c%2,y+c/2); 在某些情况下,您可能会发现使用它更容易