如何使用任何二元运算符示例 OR 或 AND,自定义函数来定义通用缩减?

How to define generic reductions using any binary Operator example OR or AND, custom function?

我相信 Halide 目前支持 summinimummaximumproduct,它们与 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);

最好有一个 Halide 函数,它可以通过指定一个缩减函数(两个输入)来执行一般缩减

提前感谢您的回复。

帮手 sum、product 等实际上并不是内置的。它们只是用 Halide 前端语言本身编写的助手,因此您可以根据需要定义更多,或者制作一个采用二元运算符的泛型。我会先看看 https://github.com/halide/Halide/blob/master/src/InlineReductions.cpp

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