卤化物多GPU支持

时间:2018-08-12 15:51:58

标签: c++ halide

我在Halide::Generator中有一个多阶段管道,该管道计划在GPU上运行。在我的计算机上,我有两个支持CUDA的GPU,我想知道是否可以并行运行此生成器的两个实例(每个GPU上一个),并将两个输出缓冲区返回给主机以进行进一步处理

如果可以实现,您能否告诉我它是如何完成的,以及该解决方案是否可扩展到具有任意数量GPU​​的计算机?

非常感谢。

===更新===

正如@Zalman所建议的那样,我一直试图覆盖halide_cuda_acquire/release_context函数,并使用void* user_context指针来选择适当的上下文。为了帮助我,我以test/generator/acquire_release_aottest.cpp脚本为基础。尽管我发现了a bug in the script and fixed it,但我仍然不知道如何有效地使用user_context

我所要做的就是创建与我拥有的多个设备相关的多个cuda_ctx,并在cuda_ctx函数中选择一个halide_cuda_acquire_context来设置指定的我的生成器将在其上运行的GPU。

所以我的问题归结为应如何/在何处设置user_context指针?

1 个答案:

答案 0 :(得分:1)

可能最好的方法是使用halide_cuda_acquire_context参数定义自己的halide_cuda_release_contextuser_context版本,以找出要使用的CUcontext。这样一来,便可以在希望给定内核运行的任意GPU上创建上下文,然后传递指向该上下文的user_context。

如果尝试在多个上下文中运行同一内核,则可能会遇到问题,因为该内核未在第二个上下文中编译。我想我已经解决了,但如果没有,我会解决。