Мне нужна небольшая функция для определения того, доступен ли на данном компьютере графический процессор с поддержкой 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 или других подобных хаках)
Непонятно, почему драйвер активен на машине, у которой нет графического процессора. У меня есть разные машины RHEL 6, и у них нет «nvidia.ko» в указанном вами месте. Я скомпилировал и запустил ваш код на компьютере, на котором никогда не было установлен драйвер NVIDIA (но CUDA был установлен, включая библиотеки), и он сообщил о правильной распечатке из кода, ничего не отправленного в stderr. –
Чтобы подтвердить, что мы предполагаем, запустите свою программу с помощью stdout и stderr, перенаправленных (чтобы разделить файлы), чтобы убедиться, что ваш процесс выдает сообщение. – Hurkyl
1. Да, при перенаправлении как stdout, так и stderr сообщение об ошибке появляется в файле stderr. –