1

如您所知,您是否尝试过 Halide select(x,y,z); 类似于 C++ 中的三元运算符,其中 x 是条件 y(如果为真)和 z(如果为假)。

想象一下 y 只是返回 0 而 z 是一个非常昂贵的函数,跳过对 x 为假的 z 进行评估是有意义的,不幸的是,即使我设置了 select(x,likely(y),z); ,Halide 也会评估这两个术语;或者至少如果我使用 compile_to_file (.h + .lib)

对此有任何想法吗?

谢谢!

4

1 回答 1

1

内在函数的效果likely仅限于循环剥离,而不是任何select可能使用 a 的地方。也就是说,只有当条件与select出现的函数定义的坐标密切相关时,这才有效(如在图像上的边界条件中,其中选择基于函数的 x 和 y 坐标)。它不会任意select表达式转换为完整的分支if/else语句。

您可以在内在的测试中看到一些示例。

如果您共享一段实际运行的代码,则更容易讨论为什么循环剥离和likely内在函数在您的特定情况下适用或不适用。

于 2015-07-02T01:34:21.260 回答