我有一个问题,我想在多个 CUDA 设备上拆分,但我怀疑我当前的系统架构阻碍了我;
我设置的是一个 GPU 类,具有在 GPU 上执行操作的功能(奇怪)。这些操作的风格
for iteration in range(maxval):
result[iteration]=gpuinstance.gpufunction(arguments,iteration)
我原以为 N 个设备会有 N 个 gpuinstances,但我对多处理的了解还不够,无法看到应用它的最简单方法,以便异步分配每个设备,奇怪的是,我遇到的示例很少处理后整理结果的具体演示。
谁能给我这方面的任何指示?
更新 感谢 Kaloyan 在多处理领域的指导;如果 CUDA 不是特别的症结所在,我会将您标记为已回答。对不起。
在使用这个实现之前,gpuinstance 类启动了 CUDA 设备,import pycuda.autoinit
但是这似乎不起作用,invalid context
一旦每个(正确范围的)线程遇到 cuda 命令,就会抛出错误。然后我尝试在__init__
类的构造函数中手动初始化......
pycuda.driver.init()
self.mydev=pycuda.driver.Device(devid) #this is passed at instantiation of class
self.ctx=self.mydev.make_context()
self.ctx.push()
我的假设是在创建 gpuinstances 列表和线程使用它们之间保留上下文,因此每个设备都位于自己的上下文中。
(我还实现了一个析构函数来进行pop/detach
清理)
问题是,invalid context
一旦线程尝试接触 CUDA,异常仍然会出现。
有什么想法吗?感谢能走到这一步。自动为“香蕉”工作的人投票!:P