CUDA 运行时错误代码列表不匹配

List of CUDA runtime error codes doesn't match

我正在为我的客户更新 Windows 和 MacOS C++ 代码库以使用 CUDA 10.1 而不是 [8? something older],并且在一个大的内部错误代码列表中有 2 个部分用于识别的 CUDA 错误代码;一个用于驱动程序,一个用于运行时。由于这些列表中缺少较新的错误条目,我查阅了 official driver's CUresult enum docu and the official runtime's cudaError enum docu,但令我惊讶的是,它们具有兼容的错误代码(例如,有一些独特的额外代码)。然而,我正在更新的代码库中的运行时错误列表与驱动程序列表完全不同。

为了进一步探索,我从当前运行时列表中挑选出代码 30,并将其视为 Unsupported CUDA Card。但是 30 在两个官方错误代码列表中都不是有效选项。然而,谷歌搜索 cuda runtime error 30 让我看到了很多关于人们收到错误代码 30 的论坛帖子,经常提到术语“未知错误”(可能是由于他们将其传递给 cudaGetErrorName 甚至 cuGetErrorName,然后取回?)。

所以虽然这个代码库中有 30 个,而官方列表甚至没有提到任何类似 30 个的东西,但它看起来确实有点合法。

我在这里错过了什么?

CUDA runtime API, driver API, and application APIs (CUBLAS 中的所有错误代码都在头文件中记录并作为 C/C++ enum 类型提供。该设计旨在让程序员通过名称而不是值来使用这些枚举。如果 NVIDIA 决定将枚举重估作为 API 大修或重构的一部分,按值使用它们会使天真或有勇无谋的程序员有可能改变这些值。正如您所发现的那样,在 CUDA 开发的 12 多年里,这种情况已经发生了好几次。

虽然使用枚举名称而不是值需要更多的输入,但它是面向未来的。替代方案并不好玩。这不是 first time I have counselled 不要试图围绕值设计任何您关心的代码,因为它可能并且可能会在将来的某个时候中断。

希望这个答案能成为最后一个答案。