我在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
指针?
答案 0 :(得分:1)
可能最好的方法是使用halide_cuda_acquire_context
参数定义自己的halide_cuda_release_context
和user_context
版本,以找出要使用的CUcontext。这样一来,便可以在希望给定内核运行的任意GPU上创建上下文,然后传递指向该上下文的user_context。
如果尝试在多个上下文中运行同一内核,则可能会遇到问题,因为该内核未在第二个上下文中编译。我想我已经解决了,但如果没有,我会解决。