如何防止两个CUDA程序的干扰

如何防止两个CUDA程序的干扰,cuda,locking,nvidia,Cuda,Locking,Nvidia,我注意到,如果两个用户试图同时运行CUDA程序,它往往会锁定卡或驱动程序(或两者都锁定?)。我们需要重置卡或重新启动机器以恢复正常行为 有没有办法锁定GPU,使其他程序在GPU运行时不会干扰 编辑 操作系统是运行在服务器上的Ubuntu 11.10。当没有X窗口运行时,该卡用于显示文本系统控制台。有多个用户。您可以使用类似的方法对程序进行排队,然后一次运行一个程序 我们使用,但它比ts更难配置。使用TORQUE,您可以拥有多个队列(即一个队列用于cuda作业,两个队列用于cpu作业),并为每个g

我注意到,如果两个用户试图同时运行CUDA程序,它往往会锁定卡或驱动程序(或两者都锁定?)。我们需要重置卡或重新启动机器以恢复正常行为

有没有办法锁定GPU,使其他程序在GPU运行时不会干扰

编辑
操作系统是运行在服务器上的Ubuntu 11.10。当没有X窗口运行时,该卡用于显示文本系统控制台。有多个用户。

您可以使用类似的方法对程序进行排队,然后一次运行一个程序


我们使用,但它比
ts
更难配置。使用TORQUE,您可以拥有多个队列(即一个队列用于cuda作业,两个队列用于cpu作业),并为每个gpu分配不同的作业。

如果您使用TCC驱动程序在Linux或Windows上运行,则可以使用将gpu置于计算独占模式


如果另一个进程已经在该GPU上拥有上下文,则Compute exclusive模式使驱动程序拒绝上下文建立请求。任何试图在繁忙的计算专用GPU上运行的进程都将收到“无设备可用”错误并失败。

OS?硬件?系统是否由多个用户共享?谢谢。这似乎是最容易做到的。但是我不确定独占线程和独占进程之间的区别。手册页写得很笨拙。“独占_进程”表示每个设备只允许一个上下文,一次可从多个线程使用。@BarryBrown:区别在于是否允许从同一进程中的多个线程共享上下文,或者只有一个线程可以访问GPU。在CUDA4.0及更新版本中,API是线程安全的,因此任何来自持有上下文的进程的线程都可以访问GPU。在此之前,上下文被绑定到创建它们的线程。您可能希望在99%的实际案例中使用
独占\u过程。由于您在没有显示管理器的情况下运行,您可能还希望查看持久化模式,以便在GPU空闲时驱动程序不会卸载。感谢您的澄清。我将在启动脚本中添加
nvidia smi-c EXCLUSIVE_进程。它已经在使用持久化模式了。@Talonmes我还是有点困惑。手册中提到了计算模式,“默认”意味着每个设备允许多个上下文。“这难道不意味着Linux中允许多个cuda程序驻留在同一个设备上吗?@KingCrimson:你注意到我说的是独占模式而不是默认模式吗?现在有两种独占模式:“线程独占”和“线程独占”它们的工作原理与我在回答中所描述的完全相同,但在两个不同的粒度级别上。