我有几个并行Nsight兼容的CUDA GPU。第二个(较低的)连接到我的监视器,第一个(较高的)被设置为PhysX加速器。您可以在下面清楚地看到我的配置。为CUDA调试选择一个设备
现在为了使用Nsight执行CUDA调试,我只需要在未连接到显示器的GPU上运行内核代码。我的电脑已经设置为“无头调试”。另外下面是我希望在其他GPU上执行的代码,一个基本的例子:
// KernelCall.cu
#include <iostream>
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
__global__ void kernel(void){}
int main()
{
kernel<<<1,1>>>();
system("pause");
return 0;
}
我的问题基本上是什么,我需要把这个代码,以便它只有在其他设备上执行,并让我执行CUDA调试?
在NVML API(在CUDA 4.0 CUDA工具SDK的一部分)有它允许你检查一个显示器被连接到设备的方法: nvmlDeviceGetDisplayMode(nvmlDevice_t device,nvmlEnableState_t * display); 但是,nvml.h中的文档说这个函数只适用于Tesla和Quadro产品,所以它可能对您没有多大用处! 我能想到的唯一选择可能是NVIDIA控制面板API。这似乎应该能够告诉你是否有附加的显示,但我并不真正熟悉它。 – Matt 2011-05-26 09:27:08
@Matt感谢您的建议,我没有意识到4.0工具包中的这个特性。不过,我很高兴地说,我只是将我的显示器连接到第一个GPU,并在我的所有代码的开头使用了cudaSetDevice(1)。我使用HWMonitor来查看GPU温度,而且动画程序确实似乎提高了第二个GPU的温度。由于NVIDIA提供的非常明确的指令,我还得到了Parallel Nsight的CUDA调试工作,因此现在一切都很顺利。再次感谢你提供的建议。 – sj755 2011-05-26 19:09:32