Я пытаюсь изменить расположение буфера реализации.
Я понимаю, что цель Halide — дать возможность определить алгоритм «один раз», а затем иметь возможность изменять такие вещи, как расписание и расположение хранилища по отдельности.
я пытался my_output_function.reorder_storage(x,y,c)
(и переставляя x,y,c
); тем не менее, для любого порядка хранения шаги реализации буфера остаются неизменными (то есть компоновка не изменяется).
Если я меняю порядок измерений при звонке my_output_function.realize(width, height, channels)
, то код не компилируется, так как некоторые граничные условия нарушаются. Я должен был бы изменить определение алгоритма, побеждая цель галида.
Что я должен сделать, чтобы изменить формат вывода?
Почему reorder_storage
не влияет на вывод?
Спасибо за вашу помощь.
Порядок вывода определяется не 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
Обмен шагами изменяет подразумеваемое чередование хранилища этого выходного буфера.
В общем, это не так хорошо раскрывается через JIT API (realize
и т. д.) в соответствии с соглашением о вызовах AOT (передача вручную buffer_t
с). Мы могли бы добавить, например, set_stride
методы на Buffer
/Image
/так далее. Чтобы узнать больше о модели AOT, ознакомьтесь с уроком 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
Надеюсь, это поможет. Кроме того, не стесняйтесь спрашивать на список рассылки, который очень активен.