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