Как назвать несколько выходов функции (кортеж)?

Скажем, у меня есть генератор для генерации скомпилированной функции Ahead of Time, что-то вроде следующего.

Halide::Func build(){
   Halide::Func func1("func1"), func2("func2"), func3("func3");
   Halide::Func result("result");
   func1(x,y) = input(x,y) * 3; func2(x,y) = y; func3(x,y) = x + y;
   result(x,y) = Halide::Tuple({func1(x,y), func2(x,y), func3(x,y)});
   return result;
}

После компиляции в файлы объектов и заголовков подпись генератора выглядит примерно так:

int myFunction(buffer_t * input, buffer_t * result_0_buffer, buffer_t * result_1_buffer, buffer_t * result_2_buffer);

Как я могу переименовать выходные аргументы myFunction?

result_0_buffer => func1

result_1_buffer => func2

result_2_buffer => func3

Спасибо

1 ответ

Решение

Если вы компилируете конвейер и добавляете отдельные функции к конвейеру в качестве выходных данных, а не используете кортеж, параметры результата должны принимать имена функций, добавленных в конвейер. Я не проверял это, но это выглядит так: Halide::Pipeline pipeline({func1, func2, func3}); pipeline.compile_to(...);

Трубопровод также более гибок в том, что выходные данные могут иметь различные формы / размеры.

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