Halide'选择'没有评估两个参数

时间:2015-06-18 09:19:28

标签: c++ select arguments ternary-operator halide

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

想象一下y只是返回0而z是一个非常昂贵的函数,它可能有意义跳过评估z,其中x是假的,不幸的是,即使我设置了select(x,很可能(y),z,Halide也会评估这两个项);或者至少它发生在我使用compile_to_file(.h + .lib)

的时候

对此有何想法?

谢谢!

1 个答案:

答案 0 :(得分:-1)

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

您可以在the tests for the intrinsic中看到一些示例。

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