2012-01-27 73 views
1

我在啓用GPU的機器上編寫代碼,但是我的代碼需要可移植到沒有GPU的計算機。所以我寫了2個函數,一個只使用CPU,一個使用CPU + GPU。確定一臺計算機在CUDA運行時是否具有GPU C

我是有條件的合規性的代碼,例如:

if (COMPUTER_HAS_GPU) 
    //Run CPU+GPU code 
else 
    //Run CPU only code 

是否有這樣的事?

+2

您的示例建議您不要在運行時執行此操作,而是在編譯時執行此操作。最簡單的方法是添加一個定義並讓用戶指定他們想要的。 – 2012-01-27 15:14:32

+0

你說得對,我的例子確實建議運行時,但現在我改變它編譯時間。 – user1007692 2012-01-27 15:21:51

+1

@ user10007692我假設您的意思是您的示例提供了編譯時間,但您已將其更改爲運行時。 – 2012-01-27 15:23:02

回答

4

您可以使用cudaGetDeviceCount()

例如:

int devices = 0; 

cudaError_t err = cudaGetDeviceCount(&devices); 

if (devices > 0 && err == cudaSuccess) 
{ 
    // Run CPU+GPU code 
} 
else 
{ 
    // Run CPU only code 
} 
1

你可以嘗試使用cudaGetDeviceCount(*int);功能,讓您有多少個CUDA設備你有,你可以檢查錯誤代碼。

int i; 

cudaError_t e = cudaGetDeviceCount(&i); 

if (e == cudaErrorNoDevice) { 
// No CUDA device :-(
} else { 
// CUDA device .o/ 
}