CUDA运行时版本与CUDA驱动程序版本-有什么区别?

24

CUDA Runtime API提供了以下函数:

  • cudaRuntimeGetVersion()
  • cudaDriverGetVersion()

(详细描述请参见此处)。我原本期望第一个函数返回"CUDA 8.0",而第二个函数返回与nVIDIA GPU驱动内核模块相同的字符串,例如:

modinfo nvidia | grep "^version:" | sed 's/^version: *//;'

在我的系统上,它是367.57

现在,第一个调用给了我8000 - 好的,这只是一种奇怪的说法,可能是8.0;但第二个API调用也给了我8000。那么这两个是什么意思呢?

我链接的Runtime API文档似乎没有解释这个。

1个回答

19
CUDA运行时版本表示与安装的cudart(CUDA运行时)库的兼容性(即版本)。
CUDA驱动程序版本(如此处所述)报告与驱动程序相关的相同信息。
这与CUDA中的驱动程序兼容性模型有关。正如您所知,特定的CUDA工具包版本(即CUDA运行时库版本,nvcc编译器版本等)需要特定的最低驱动程序级别才能正确使用使用该工具包编译的代码。
CUDA驱动程序版本(如此处所述)有效地报告了特定安装的驱动程序可以支持的CUDA版本
正如您已经发现的那样,它不会报告实际的驱动程序版本号。
目前无法通过CUDA运行时或驱动程序API获取实际的驱动程序版本号。我不希望在这方面有任何变化,因为驱动程序的具体细节在CUDA级别上是抽象的 - 就像在这里发现的那样。
如果你想以编程的方式获取驱动程序的版本号,一种方法是使用NVML(这是由GPU驱动程序安装和提供的)。
如果你希望在CUDA中看到变化,你可以随时提交错误报告

1
(叹气)我现在明白了。所以,我可以把混淆的名称归咎于这个问题...谢谢。你给了我一些关于这个的工作要做。 - einpoklum
另外,我应该如何解释8000?最低的三个十进制数字是一个单独的“次版本号”,还是类似于8.0.0或8.0.0.0这样的东西?毕竟,CUDA 8.0发布时上次我下载的版本名为8.0.44。 - einpoklum
2
研究deviceQuery CUDA示例代码以获取解释提示。这里没有子版本控制。8000 = CUDA 8。 - Robert Crovella
我还是不明白。有人能 ELI5 吗?我如何在代码之外检查这两个问题(是否有通过命令行的方式)?还有一个显卡驱动程序吗(因此有三个东西:CUDA 运行时、CUDA 驱动程序、Nvidia 驱动程序),还是只有两个东西? - Breck
4
  1. 有一个GPU驱动程序版本。使用nvidia-smi进行查询。
  2. 驱动程序关联着一个CUDA兼容性版本(每个特定的GPU驱动程序版本都与其关联一个特定的CUDA兼容性版本)。最近版本的nvidia-smi工具会显示它们所具有的CUDA兼容性版本。
  3. 有一个CUDA运行时版本,它将与你用来构建特定运行时API代码的运行时API相关。例如,你可以使用nvcc -v查询此信息,或者使用deviceQuery示例代码查询这两个信息。
- Robert Crovella

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接