【发布时间】:2012-10-10 21:14:33
【问题描述】:
我想在不链接到 CUDA 库的情况下提取一组相当有限的关于 NVIDIA GPU 的信息。 需要的唯一信息是 GPU 的计算能力和名称,除此之外可能有用但不是必需的。代码应该用 C(或 C++)编写。该信息将在配置时(当 CUDA 工具包不可用时)和运行时(当执行的二进制文件未使用 CUDA 支持编译时)用于向用户建议系统中存在受支持的 GPU。
据我了解,这可以通过驱动程序 API 实现,但我不太熟悉这需要什么技术细节。所以我的问题是:
至少满足最低要求的具体步骤是什么(见上文);
有这样的开源代码吗?
请注意,我的第一步是为 Linux 编写一些代码,但最终我需要独立于平台的代码。考虑到 CUDA 的平台可用性,对于一个完整的解决方案,这将涉及适用于 Linux、Mac OS 和 Windows 的 x86/AMD64 上的代码(至少目前,该列表很快就会随着 ARM 得到扩展)。
编辑
我所说的“可以通过驱动程序 API”的意思是应该能够动态加载 libcuda.so 并通过驱动程序 API 查询设备属性。不过,我不确定细节。
【问题讨论】:
-
您是否考虑过Tesla Deployment kit(包括您提到的查询的源代码示例,但有一些限制)?
-
@RobertCrovella 我有,但我不太喜欢分发二进制文件的想法。其他缺点是什么?
-
您指的是哪些二进制文件需要分发? libnvidia-ml.so 由 nvidia 驱动程序安装(如果它是“最近的”驱动程序)。因此,在不试图在评论中涵盖所有内容的情况下,限制是:1. 需要安装适当的“最新”nvidia 驱动程序,2. 提供的 GeForce 产品信息可能不如 Quadro 和 Tesla GPU(尽管这部分是 GeForce 限制,例如不支持 ECC)。
-
出于好奇,为什么不使用 Cuda 工具包进行构建是禁忌。因为这实际上是有史以来最简单的事情。
-
CUDA SDK 中包含的 CUDA 示例中有一个 deviceQueryDrvAPI 示例(从 CUDA 5.0 开始,包含在 CUDA 工具包分发中)。这向您展示了如何使用驱动程序 API 查询您需要的内容。但是所有建议的解决方案都需要“链接到 CUDA 库”。我怀疑你只是说你不想链接到 CUDA 运行时 API 库 (cudart),因为这需要你分发 cudart 共享库。