c++ - 不评估两个参数的 Halide 'select'

标签 c++ select arguments ternary-operator halide

如果您尝试过 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/

相关文章:

python - 将函数及其参数之一传递给 Python 中的另一个函数

c++ - 空数组声明 - 奇怪的编译器行为

c++ - 在 C++ 中寻找吃得最少的人

php - 无法在 php 中访问 mySql 结果

php - MySQL - 如何从 SELECT 查询中获取多个结果

传递可变数量参数的 Swift 问题

Java函数类似文字游戏,最后一个字母=下一个单词的第一个字母

c++ - 如何在处理 Windows 事件时保持 Qt Widgets 对键盘和鼠标的响应?

c++ - 除了 Corba 组件之外,是否存在任何 C++ 组件框架?

ruby-on-rails - collection_select 不在 rails 4 中显示 text_method