我有幾個並行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