如何在两个不同的NVidia GPU卡之间手动切换 - Windows 7


1

我正在用两张GPU卡进行一些实验:

卡A:GeForce GTX 560 Ti卡B:GeForce 9800 GTX +设置:采用Intel Core i7的华硕主板,支持SLI预期实验:使用Card B进行所有图形用途,如显示操作系统和应用程序; 将Card A 用于GPU内核计算

我知道这两张卡都很老了,但我认为它们设置得很好 - 我可以在设备管理器中看到它们,以及当我运行CUDA查询设备时

在此输入图像描述

我的问题是:

有没有办法绝对 “关闭”卡A用于操作系统中的任何其他目的,并且卡A只会被“触发”以在cudaSetDevice()'目标'时运行CUDA内核?

到目前为止,我使用的天真方式只是将1个显示器连接到卡B.这种方法似乎有效 - 在显示器上播放youtube视频时,卡B会产生一些GPU内存活动和GPU加载,并且没有检测到这样的GPU活动在卡A上。一旦我用卡A的cudaSetDevice()'目标'运行一些CUDA代码,它就会产生一些GPU活动。

在此输入图像描述

但我认为必须有一些更准确的方法来做到这一点。有人可以给我一些指示,如果它与BIOS的玩法有关,如果你能提供一些细节我将不胜感激,因为我在过去做的很少。

扩展到我的问题(我猜):

有没有办法真正在两个NVidia GPU之间切换(我认为这应该是与那些涉及英特尔GPU单元的NVidia Optimus技术相关的单独问题,不是吗?)


那么使用cudaSetDevice(int n)函数调用每次选择相同的GPU有什么问题?设备偏移应在后续运行之间保持不变,但您也可以cudaChooseDevice根据其规格使用该功能与特定卡匹配。但是,鉴于您是以编程方式执行此操作,为什么不只是让一段代码选择GPU而不是从GPU物理插拔电缆?
突破2013年

Answers:


1

除了你已经做过的事之外,你还能做的事情并不多。在Windows下,GeForce GPU(所有这些)都受WDDM环境的控制。对此最大的单一强制是Windows TDR机制(可以修改,虽然有注册表黑客攻击,也许是反复试验)。除此之外,只需避免在想要为CUDA保留的GPU上构建桌面,然后进行适当的检测cudaSetDevice()就足够了。

要直接回答你的问题,因为WDDM不能被关闭,并且它至少有一定的副作用(TDR是其中之一),没有就没有办法与Windows下的GeForce GPU完全禁用OS的互动,使得只卡经历任何操作系统交互的时间是在其上创建CUDA上下文时。

是的,这是关于堆栈溢出的主题,这就是为什么关闭投票的原因。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.