Разбить ‘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 встроенный делать или не применять в вашем конкретном случае.

-1

Другие решения


По вопросам рекламы [email protected]