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