利用Halide利用GPU
问题描述:
我正在使用Halide实现一个算法,同时比较相同算法的手调(使用CUDA)版本。 Halide实现的加速大多进行得很顺利,但仍然比手动调整版慢一点。所以我试着用nvvp(nvidia visual profiler)来查看每个Func的确切执行时间。通过这样做,我发现手动调整的实现重叠了多个函数(它们是相似的),它在Halide实现中作为Func实现。 Cuda的Stream技术被用来做到这一点。利用Halide利用GPU
我想知道我是否可以在Halide中做类似的GPU开发。
我很喜欢阅读。
答
当前运行时不支持CUDA流。有可能用一些可以做到这一点的东西替换运行时,但是没有传入额外的信息来控制并发。 (运行时在某种程度上被设计为可替换的,但是有一个单一队列的概念,并且完整的依赖信息不会被传递下来,可以从输入和输出重建依赖关系,但开始时很多工作要解决编译器应该解决的问题)
我们正在讨论如何在调度中表达这种控制。一种可能性是使用async分支中原型化的支持来做到这一点,但是我们并没有完全想到如何将其应用于GPU。 (基本思想是在GPU上调度一个Func异步会将它放在不同的流中,我们需要使用GPU同步API来处理生产者/消费者依赖。)最终,这是我们感兴趣的开发工作,但工作需要要做。