我在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,并在halide_cuda_acquire_context函数中选择一个cuda_ctx,该函数设置我的生成器将在其上运行的指定GPU。
所以我的问题可以归结为应该如何/在哪里设置user_context指针?
发布于 2018-08-14 05:45:51
最好的方法可能是定义您自己的halide_cuda_acquire_context和halide_cuda_release_context版本,它们使用user_context参数来确定要使用哪个CUcontext。这样,我们就可以在任何想要运行给定内核的GPU上创建一个上下文,然后传入一个指向该上下文的user_context。
如果试图在多个上下文中运行相同的内核,这可能会遇到问题,因为内核不会在第二个上下文中编译。我想我已经解决了这个问题,但如果没有,我会的。
https://stackoverflow.com/questions/51810425
复制相似问题