gpt4 book ai didi

python - 更改 Halide 输出缓冲区布局

转载 作者:行者123 更新时间:2023-11-30 02:41:42 25 4
gpt4 key购买 nike

我正在尝试更改实现的缓冲区布局。我知道 Halide 的目的是允许“一次”定义算法,然后能够分别更改调度和存储布局等内容。

我已经尝试过 my_output_function.reorder_storage(x,y,c)(并置换 x,y,c);然而对于任何存储顺序,实现缓冲区步幅保持不变(即布局不会改变)。

如果我在调用 my_output_function.realize(width, height, channels) 时更改维度顺序,则代码不会编译,因为违反了某些边界条件。我需要更改算法定义,破坏 Halide 的目的。

我应该怎么做才能更改输出布局?为什么 reorder_storage 不影响输出?

感谢您的帮助。

最佳答案

输出顺序不是由reorder_storage(我们应该禁用或警告输出函数)定义的,而是由输出缓冲区的布局定义的,如其步幅所示。您无法使用最简单的 Func::realize 方法来控制它,这些方法采用维度参数并返回系统分配的 Image,但您可以提前编译接口(interface)或与其他采用用户分配结构的实现方法:

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

特别是,如果您构造一个Buffer,并修改其raw_bufferstride 字段:

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

交换步长会改变此输出缓冲区存储的隐含交错。

一般来说,通过 JIT API(realize 等)不如通过 AOT 调用约定(手动传入 buffer_t)公开。例如,我们可以在 Buffer/Image/etc 上添加 set_stride 方法。要了解有关 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

希望对您有所帮助。另外,请随时询问 mailing list , 这是非常活跃的。

关于python - 更改 Halide 输出缓冲区布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com