如何使用任何二进制运算符示例OR或AND,自定义函数来定义通用归约?

时间:2019-03-05 06:52:01

标签: halide

我相信Halide当前支持sum使用的minimummaximumproductRDom。我想写一个函数来减少自定义二进制操作,例如。 'AND(&&)','OR(||)','(&&'','(|)'等。如何在Halide中做到这一点?

这是我对这个问题的看法: 假设我们有一个uint8_t input并使用(|)进行归约,

RDom rw(0,width); rh(0,height);
Func f,g;
f(y) = cast<uint8_t>(0);
f(y) = f(y) | input(rw,y);
g(x) = cast<uint8_t>(0);
g(x) = g(x) | f(rh);

最好有一个卤化物函数,它可以通过指定归约函数(两个输入)来执行通用归约

预先感谢您的答复。

1 个答案:

答案 0 :(得分:2)

助手的求和,乘积等实际上不是内置的。它们只是用Halide前端语言本身编写的帮助程序,因此您可以根据需要定义更多的内容,也可以制作一个采用二进制运算符的泛型。我将从查看https://github.com/halide/Halide/blob/master/src/InlineReductions.cpp

开始

魔术的大部分就是自动捕获自由变量,其余的就像您编写的代码一样。