我相信Halide当前支持sum
使用的minimum
,maximum
,product
和RDom
。我想写一个函数来减少自定义二进制操作,例如。 '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);
最好有一个卤化物函数,它可以通过指定归约函数(两个输入)来执行通用归约
预先感谢您的答复。
答案 0 :(得分:2)
助手的求和,乘积等实际上不是内置的。它们只是用Halide前端语言本身编写的帮助程序,因此您可以根据需要定义更多的内容,也可以制作一个采用二进制运算符的泛型。我将从查看https://github.com/halide/Halide/blob/master/src/InlineReductions.cpp
开始魔术的大部分就是自动捕获自由变量,其余的就像您编写的代码一样。