2015-07-03 2 views
1

Мне нужна небольшая функция для определения того, доступен ли на данном компьютере графический процессор с поддержкой CUDA, например, следующий.Отключить печать на stderr драйвером NVIDIA?

#include <stdio.h> 
#include <cuda_runtime.h> 

int main() { 
    int deviceCount; 
    struct cudaDeviceProp properties; 
    cudaError_t cudaResultCode = cudaGetDeviceCount(&deviceCount); 
    if (cudaResultCode != cudaSuccess) 
     deviceCount = 0; 
    printf("%d GPU CUDA device(s) found\n", deviceCount); 
} 

На машине без GPU вставлен (но с библиотеками CUDA установлен), этот код запускает драйвер для входа сообщение в стандартный поток ошибок.

$ ./a.out 
FATAL: Error inserting nvidia (/lib/modules/2.6.32-504.16.2.el6.x86_64/extra/nvidia.ko): No such device 
0 GPU CUDA device(s) found 

Есть ли способ, чтобы предотвратить это сообщение от печатаемого водителя? (на машинах без GPU и без закрытия stderr или других подобных хаках)

+2

Непонятно, почему драйвер активен на машине, у которой нет графического процессора. У меня есть разные машины RHEL 6, и у них нет «nvidia.ko» в указанном вами месте. Я скомпилировал и запустил ваш код на компьютере, на котором никогда не было установлен драйвер NVIDIA (но CUDA был установлен, включая библиотеки), и он сообщил о правильной распечатке из кода, ничего не отправленного в stderr. –

+0

Чтобы подтвердить, что мы предполагаем, запустите свою программу с помощью stdout и stderr, перенаправленных (чтобы разделить файлы), чтобы убедиться, что ваш процесс выдает сообщение. – Hurkyl

+0

1. Да, при перенаправлении как stdout, так и stderr сообщение об ошибке появляется в файле stderr. –

ответ

1

Самый простой способ добиться этого - перенаправить stderr в/dev/null (или в файл журнала ошибок). Подробности здесь: http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

Тогда единственное, что напечатано, будет вашим сообщением в стандартный вывод.

+1

Извините, я не могу использовать перенаправление. Фактическая проблема заключается в том, что этот код находится внутри гораздо более крупной библиотеки - если это вообще возможно, я хочу, чтобы избежать сбрасывания подпроцесса для этой цели. –

Смежные вопросы