使用Halide开发GPU

时间:2017-06-06 20:33:44

标签: halide

我使用Halide实现算法,同时比较同一算法的手动调整(使用CUDA)版本。 Halide实现的加速大多顺利,但仍然比手动调整版本慢一点。所以我尝试使用nvvp(nvidia visual profiler)查看每个Func的确切执行时间。通过这样做,我发现手动调整的实现与多个函数(它们相似)执行重叠,这些函数在Halide实现中作为Func实现。 Cuda的Stream技术用于实现它。

我想知道我是否可以在Halide中对GPU进行类似的利用。

我很感激阅读。

1 个答案:

答案 0 :(得分:1)

目前,运行时不支持CUDA流。有可能用可以执行此操作的内容替换运行时,但是没有传递额外信息来控制并发。 (运行时有点被设计为可替换的,但是有一个单一队列的概念,并且没有传递完整的依赖性信息。可能有可能从输入和输出重建依赖性,但这开始是很多工作要解决编译器应该解决的问题。)

我们正在讨论如何在时间表中表达这种控制。一种可能性是使用异步分支中的原型支持来完成此操作,但我们还没有完全弄清楚如何将其应用于GPU。 (基本思想是在GPU上调度Func异步将它放在不同的流上。我们需要使用GPU同步API来处理生产者/消费者依赖关系。)最终这是我们有兴趣利用的东西,但是工作需要完成。