2015-07-03 51 views
1

我想要一个小函数来检测给定的计算机是否有支持CUDA的GPU,如下所示。NVIDIA驱动程序禁止打印到stderr?

#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); 
} 

在机器没有(但安装了CUDA库)插入一个GPU,该代码触发登录消息到stderr驾驶员。

$ ./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

目前尚不清楚为什么驱动程序在没有GPU的机器上处于活动状态。我有各种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

对不起,我无法使用重定向。实际的问题涉及将这些代码放在一个更大的库中 - 如果可能的话,我想避免为此目的分出一个子进程。 –

相关问题