我有两个gpu,我怎么能让一个做特定的CUDA任务
I have two GPUs, how can I just let one to do certain CUDA task?
刚接触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设备的设备。
- C++一个线程如何正确通信其任务已完成?
- 编写一个读取五个整数并执行一些任务的C++程序
- 父类有 26 个构造函数重载.如何在不复制+粘贴 26 个重载的情况下将一个小任务附加到所有构造器?
- 我是否需要在VSCODE中创建一个任务
- 我的任务是在框架内打印一个字符串,例如一个正方形
- 几个单身汉:每个任务一个
- 取消一个c++11异步任务
- 将执行从一个线程移动到另一个线程,以实现任务并行性并在将来调用
- 当我打开一个新对话框时,如何禁止在Qt编程的Windows任务栏中显示对话框
- 任务在删除其中一个迭代对象时会导致段错误
- MFC PreCreateWindow,用于创建一个填充除任务栏之外的屏幕的窗口
- 需要在原生代码中调度一个计时器任务,用于安卓 ndk 开发
- 具有两个窗口的C++中的应用程序.任务栏中显示的一个窗口.另一个未显示
- 为一个任务设置固定线程数的TBB,为其他任务设置默认线程数
- 每个任务一个异步线程
- 从c++启动一个c#应用程序,并在该应用程序上执行一个任务
- 创建一个占用特定CPU和RAM数量的任务
- 基于前一个任务的sigchld()执行新任务
- 让一个任务运行固定数量的指令
- 如何先启动另一个终端任务