2015-01-08 3 views
1

Я пытаюсь изменить структуру буфера реализации. Я понимаю, что цель Halide - дать возможность определить алгоритм «один раз», а затем поменять такие вещи, как расписание и макет памяти отдельно.Изменение габаритного формата буфера вывода

Я пробовал my_output_function.reorder_storage(x,y,c) (и заменяю x,y,c); но для любого порядка хранения шаги реализации буфера остаются неизменными (т. е. макет не изменяется).

Если я изменяю порядок размеров при вызове my_output_function.realize(width, height, channels), код не компилируется, так как некоторые граничные условия нарушаются. Мне нужно будет изменить определение алгоритма, победив цель галида.

Что мне сделать, чтобы изменить формат вывода? Почему reorder_storage не влияет на выход?

Благодарим за помощь.

ответ

2

Порядок вывода определяется не reorder_storage (что мы, вероятно, должны отключить или предупредить о выходных функциях), но по макету выходного буфера, как указано его шагами. Вы не можете контролировать это, используя простейшие методы Func::realize, которые принимают аргументы измерения и возвращают выделенные системой Image, но вы можете использовать скомпилированный интерфейс с опережением времени или с другими методами реализации, которые принимают структуры, выделенные пользователем:

http://halide-lang.org/docs/class_halide_1_1_func.html#a1f749d8761a6cf35a6f2f3c319d66729

В частности, если вы строите Buffer и изменять stride области ее raw_buffer:

http://halide-lang.org/docs/structbuffer__t.html#af60461463c076afe9dd5909e6daf4536

Swappi При этом шаги изменяют подразумеваемое чередование хранилища этого выходного буфера.

В общем, это не так хорошо видно через JIT API (realize и т. Д.), Как в случае соглашения об использовании AOT (вручную передается в buffer_t). Мы могли бы добавить, например, set_stride методы на Buffer/Image/и т. Д. Чтобы узнать больше о модели АОТ, проверить учебник 10:

https://github.com/halide/Halide/blob/master/tutorial/lesson_10_aot_compilation_generate.cpp
https://github.com/halide/Halide/blob/master/tutorial/lesson_10_aot_compilation_run.cpp

Я надеюсь, что помогает. Кроме того, не стесняйтесь спрашивать на mailing list, который очень активен.