为什么一个系列中的最后一个函数以halide_copy_to_host开头,以及如何删除它

Why does the last func in a series start with halide_copy_to_host, and how to remove it

我有一个创建渐变图像的程序。如果我为我的 GPU 编译它并查看 compile_to_lowered_stmnt 的输出,我看到它以(在 produce 语句之后)a halide_copy_to_host 开头,然后开始外循环。如果我嵌套函数,halide_copy_to_host 位于同一位置,但对于最外层的函数。注意我对日程安排没有做任何事情。我想了解为什么它在那个位置。我希望它在程序结束时将结果复制回主机,而不是在计算完成之前。如果我希望结果保留在 GPU 上(例如输出到屏幕),算法应该 运行 更快而不需要复制。有没有办法 "remove" halide_copy_to_host?

copy_to_host 可能存在以防 GPU 上的输出缓冲区变脏。如果是,并且我们没有复制到主机,那么 CPU 和 GPU 上的缓冲区会变脏,如果不跟踪每个 GPU 上缓冲区的哪些部分变脏与 CPU.

但是,如果 dev_dirty 标志设置为 false,copy_to_host 是空操作,因此在您的情况下它实际上不应该做任何事情。我认为很可能没有复制发生。如果启用 -debug 目标标志,您可以自己检查。

Halide 不会在 GPU 计算后执行 copy_to_host,以防您希望结果保留在 GPU 上,原因如您所说。