我想要一个小函数来检测给定的计算机是否有支持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或其他类似黑客的机器上)
目前尚不清楚为什么驱动程序在没有GPU的机器上处于活动状态。我有各种RHEL 6机器,并且在您指明的位置没有'nvidia.ko'。我在一台从未安装NVIDIA驱动程序(但已安装CUDA,包括库)的计算机上编译并运行代码,并从代码中报告了正确的打印输出,没有任何内容发送到stderr。 –
只是为了确认我们正在设想的内容,使用stdout和stderr重定向(分隔文件)来运行程序,只是为了确保它是您的进程发出的消息。 – Hurkyl
1.是的,在stdout和stderr都重定向的情况下,错误消息出现在stderr文件中。 –