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



我正在更新Windows &MacOS c++代码库为我的客户端使用CUDA 10.1而不是[8?在一个巨大的内部错误代码列表中,有2个部分用于识别CUDA错误代码;一个用于驱动程序,一个用于运行时。由于这些列表中缺少更新的错误条目,我参考了官方驱动程序的CUresult enum文档和官方运行时的cudaError enum文档,但令我惊讶的是,这些错误代码是兼容的(例如,有一些独特的额外代码)。然而,我正在更新的代码库中的运行时错误列表与驱动程序列表完全不同。

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

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

我在这里错过了什么?

CUDA运行时API,驱动程序API和应用程序API(例如CUBLAS)中的所有错误代码都被记录并作为头文件中的C/c++enum类型提供。这种设计旨在让程序员按名称而不是按值使用这些枚举。如果NVIDIA决定重估枚举值,作为api的全面检查或重构的一部分,那么按值使用它们将使naïve或鲁莽的程序员面临值可能改变的可能性。正如你所发现的,在CUDA开发的12年多的时间里,这种情况已经发生了好几次。

虽然使用枚举名而不是值更像是键入,但它是未来的证明。另一种选择并不有趣。这不是我第一次建议不要试图围绕值设计任何代码,因为它可能而且很可能在将来的某个时候崩溃。

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

相关内容

最新更新