我有两个gpu,我怎么能让一个做特定的CUDA任务

I have two GPUs, how can I just let one to do certain CUDA task?

本文关键字:任务 一个 CUDA 怎么能 两个 gpu      更新时间:2023-10-16

刚接触CUDA,但有一些时间花在计算上,我家里有geforce,办公室有tesla(同一代)。

在家里,我在同一台计算机上安装了两个gpu,一个是GK110(计算能力3.5),另一个是GF110(计算能力2.0),我更喜欢使用GK110只用于计算任务,GF110用于显示除非我告诉它做计算,有没有办法通过驱动程序设置来做到这一点,或者我仍然需要重写我的一些代码?

另外,如果我理解正确,如果GK110的显示端口没有连接,那么即使计算时间很长,恼人的窗口超时检测也不会尝试重置它?

顺便说一句,我的CUDA代码是用compute_35和compute20编译的,所以代码可以在两个gpu上运行,但是我计划使用GK110独有的功能,所以将来的代码可能根本无法在GF110上运行,操作系统是windows 7。

对于Windows上的GeForce GTX Titan(或任何GeForce产品),我不相信有一种方法可以防止GPU以WDDM模式出现在系统中,这意味着Windows将在其上构建显示驱动程序堆栈,即使该卡没有附加到它的物理显示器。因此,您可能会被windows TDR机制所困扰。你可以用它做实验来证实。(windows TDR行为可以通过注册表黑客修改)。

关于将CUDA任务转向GTX Titan,显示驱动程序控制面板应该对此有一个可选择的设置。它可能在"管理3D设置"区域或其他区域,这取决于您的驱动程序。当你找到适当的设置区域时,会有一个标题为"CUDA - gpu"的选项,它可能会被设置为"全部"。如果您将"全局预置"选项更改为"基本配置文件",您应该能够更改此cuda - gpu设置。点击它会给你一个选择"全部"或一组复选框为每个检测到的GPU。如果您取消选中GF110设备并选中GK110设备,那么不通过cudaSetDevice()选择特定GPU的CUDA程序应该基于此复选框选择转向GK110设备。您可能也需要对此进行实验以确认。

除此之外,正如评论中提到的,使用编程方法,您总是可以查询设备属性,然后选择报告自己为cc3.5设备的设备。