Разбить 'select' без оценки обоих аргументов

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

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

Есть идеи по этому поводу?

Спасибо!

1 ответ

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

Вы можете увидеть некоторые примеры в тестах для внутреннего.

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

Другие вопросы по тегам