Как вы можете знать, пытались ли вы использовать Halide select (x, y, z); является чем-то похожим на троичный оператор в C ++, где x — это условное y, если оно истинно, и z, если ложно.
Представьте, что y просто возвращает 0, а z — действительно дорогостоящая функция, возможно, имеет смысл пропустить оценку z, где x — ложь, к сожалению, Halide вычисляет оба термина, даже если я установил select (x, скорее всего (y), z); или, по крайней мере, это происходит, если я использую compile_to_file (.h + .lib)
Есть идеи по этому поводу?
Спасибо!
Эффект от likely
Внутренняя ограничена пилингом петли, а не где-либо select
может быть использован. Таким образом, это имеет эффект, только если условие тесно связано с координатами определения функции, в которой select
появляется (как в граничных условиях на изображении, где выбор основан на координатах x и y функции). Оно делает не повернуть произвольно select
выражения в полном ветвлении if/else
заявления.
Вы можете увидеть несколько примеров в тесты для внутреннего.
Если вы поделитесь действующим фрагментом кода, будет легче обсудить, почему очистка цикла и likely
встроенный делать или не применять в вашем конкретном случае.