2012-01-27 2 views
1

Я пишу код на компьютере с поддержкой GPU, но мой код должен быть переносимым на компьютеры без GPU. Поэтому я написал 2 функции, в которых используется только процессор и тот, который использует CPU + GPU.Определите, имеет ли компьютер графический процессор во время выполнения в CUDA C

Я для условного кода соответствия, например:

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

Есть ли что-нибудь подобное?

+2

Ваш пример подсказывает, что вы не хотите делать это во время выполнения, но во время компиляции. Проще всего было бы добавить определение и дать пользователю указать, что они хотят. –

+0

Вы правы, мой пример показал время выполнения, но теперь я изменил его, чтобы скомпилировать время. – user1007692

+1

@ user10007692 Я предполагаю, что вы имели в виду, что ваш пример предложил время компиляции, но вы изменили его на время выполнения. –

ответ

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/ 
} 
Смежные вопросы