如你所知,你是否尝试过Halide select(x,y,z);类似于C ++上的三元运算符,其中x是条件y,如果是真,则z是假。
想象一下y只是返回0而z是一个非常昂贵的函数,它可能有意义跳过评估z,其中x是假的,不幸的是,即使我设置了select(x,很可能(y),z,Halide也会评估这两个项);或者至少它发生在我使用compile_to_file(.h + .lib)
的时候对此有何想法?
谢谢!
答案 0 :(得分:-1)
likely
内在的效果仅限于环剥离,而不是可能使用select
的任何地方。也就是说,如果条件与select
出现的函数定义的坐标密切相关(例如在图像上的边界条件中,其中选择基于x和y坐标,则这仅具有效果)的功能)。 不将任意select
表达式转换为完整的分支if/else
语句。
您可以在the tests for the intrinsic中看到一些示例。
如果您共享一段实际正在运行的代码,则可以更轻松地讨论为什么循环剥离和likely
内在函数在您的特定情况下适用或不适用。