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

时间:2016-10-25 09:54:36

标签: halide

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

1 个答案:

答案 0 :(得分:0)

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

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

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