0

我有一个创建渐变图像的程序。如果我为我的 GPU 编译它并查看 compile_to_lowered_stmnt 的输出,我会看到它以(在生产语句之后)halide_copy_to_host 开始,然后开始外循环。如果我嵌套函数,halide_copy_to_host 位于同一位置,但对于最外层的函数。请注意,我对调度不做任何事情。我想了解它为什么在那个位置。我希望它在程序结束时将结果复制回主机,而不仅仅是在计算完成之前。如果我希望结果留在 GPU 上(例如输出到屏幕),算法应该在没有副本的情况下运行得更快。有没有办法“删除”halide_copy_to_host?

4

1 回答 1

0

如果 GPU 上的输出缓冲区变脏,则可能存在 copy_to_host。如果是这样,并且我们没有复制到主机,那么 CPU 和 GPU 上的缓冲区就会变脏,如果不跟踪每个 GPU 和 CPU 上缓冲区的哪些部分是脏的,就无法协调。

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

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

于 2016-10-25T16:37:51.337 回答