【问题标题】:Halide 'select' without evaluating both arguments卤化物“选择”而不评估两个参数
【发布时间】:2015-09-03 20:29:20
【问题描述】:

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

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

对此有什么想法吗?

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2020-12-13
      • 2015-12-01
      相关资源
      最近更新 更多