2015-06-18 4 views
1

Как вы можете узнать, попытались ли вы выбрать Halide (x, y, z); что-то похожее на тернарный оператор на C++, где x является условным y, если true и z, если false.Halide 'select' без оценки обоих аргументов

Предположим, что y является просто возвратом 0 и z является действительно дорогостоящей функцией, имеет смысл пропустить оценку z, где x является ложным, к сожалению, Halide оценивает оба термина, даже если я устанавливаю select (x, вероятный (y), г); или, по крайней мере, это происходит, если я использую compile_to_file (.h + .lib)

Есть идеи?

Спасибо!

ответ

0

Эффект от likely искробезопасный ограничивается пилингом петли, а не в любом месте select. То есть, это только имеет эффект, если условие тесно связано с координатами определения функции, в которой появляется select (как в граничных условиях на изображении, где выбор определяется по координатам x и y функции) , Он не turn произвольный select выражения в полном разветвлении if/else утверждений.

Вы можете увидеть несколько примеров в the tests for the intrinsic.

Если вы разделите фактический пробег кода, будет проще обсуждать, почему пилинг цикла и внутренний код likely делать или не применять в вашем конкретном случае.

 Смежные вопросы

  • Нет связанных вопросов^_^