Вывод значений в буферы разного размера

Мне нужно вывести 2 значения в буферы разного размера. Один имеет тот же размер, что и вход, а другой — половину ширины и половину высоты. Я думал об использовании кортежей, но я выхожу за рамки, так как он перебирает размер ввода. Вот краткий пример:

uint8_t _in[4] = { 1, 2, 3, 4 };
uint8_t _out1[4];
uint8_t _out2[1];

Buffer<uint8_t> in(_in, 2, 2);
Buffer<uint8_t> out1(_out1, 2, 2);
Buffer<uint8_t> out2(_out2, 1, 1);

Var x, y;
Func f;

f(x, y) = {
    in(x,y),
    in(x / 2, y / 2)
};

f.realize({ out1, out2 });

Разве кортежи не являются правильным решением для этого?


person Philippe Paré    schedule 21.03.2017    source источник
comment
Это один и тот же кортеж для каждого x, y, поэтому буферы должны быть одинакового размера.   -  person Khouri Giordano    schedule 21.03.2017


Ответы (1)


Создайте Halide::Pipeline, используя два выхода Funcs, и вызовите realize для объекта Pipeline.

Что-то вроде этого:

uint8_t _in[4] = { 1, 2, 3, 4 };
uint8_t _out1[4];
uint8_t _out2[1];

Buffer<uint8_t> in(_in, 2, 2);
Buffer<uint8_t> out1(_out1, 2, 2);
Buffer<uint8_t> out2(_out2, 1, 1);

Var x, y;
Func f1, f2;

f1(x, y) = in(x,y);
f2(x, y) = in(x / 2, y / 2);

Pipeline pipeline({f1, f2});

pipeline.realize({ out1, out2 });
person Zalman Stern    schedule 21.03.2017
comment
Сможет ли конвейер в этом случае выполнять два Func параллельно? - person Philippe Paré; 21.03.2017
comment
Зависит от расписания. Единственный способ Halide реализовать параллелизм потоков в настоящее время — это распараллелить измерение Func. В этом случае это можно сделать, имея Func с одним индексом, который принимает значения 0 и 1, а затем выбирает индекс для вычисления чего-то, что зависит от out1 или out2, но я не хочу писать это здесь как а) ответ на комментарий не подходит для этого и б) он не указывает на реальные проблемы, которые нужно решить. Как правило, несколько выходных данных используются для захвата более чем одной вещи, вычисляемой хорошо запланированным конвейером. - person Zalman Stern; 22.03.2017