CUDA运行时错误代码列表不';不匹配 我正在更新我的客户的Windows和Mac OS C++代码库,使用CUDA 10.1而不是[8个更旧的],并且在内部错误代码列表中有2个部分用于识别CUDA错误代码;一个用于驱动程序,一个用于运行时。由于这些列表中缺少较新的错误条目,我查阅了和,但令我惊讶的是,它们具有兼容的错误代码(带有一些独特的额外错误代码,例如)。但是,我正在更新的代码库中的运行时错误列表与驱动程序列表完全不同

CUDA运行时错误代码列表不';不匹配 我正在更新我的客户的Windows和Mac OS C++代码库,使用CUDA 10.1而不是[8个更旧的],并且在内部错误代码列表中有2个部分用于识别CUDA错误代码;一个用于驱动程序,一个用于运行时。由于这些列表中缺少较新的错误条目,我查阅了和,但令我惊讶的是,它们具有兼容的错误代码(带有一些独特的额外错误代码,例如)。但是,我正在更新的代码库中的运行时错误列表与驱动程序列表完全不同,c++,cuda,C++,Cuda,为了进一步探索,我从当前运行时列表中选择了代码30,它被视为不支持的CUDA卡。但在两个官方错误代码列表中,30甚至都不是一个有效选项。然而,谷歌搜索cuda运行时错误30会让我在论坛上看到很多关于人们得到错误代码30的帖子,经常提到“未知错误”一词(可能是因为他们将错误传递给cudaGetErrorName,甚至可能是cuGetErrorName,然后将其取回?) 因此,虽然这个代码库中有30个,而官方列表甚至没有提到任何类似30个的东西,但它确实看起来有点合法 我在这里遗漏了什么?CUDA中

为了进一步探索,我从当前运行时列表中选择了代码30,它被视为
不支持的CUDA卡
。但在两个官方错误代码列表中,30甚至都不是一个有效选项。然而,谷歌搜索
cuda运行时错误30
会让我在论坛上看到很多关于人们得到错误代码30的帖子,经常提到“未知错误”一词(可能是因为他们将错误传递给
cudaGetErrorName
,甚至可能是
cuGetErrorName
,然后将其取回?)

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


我在这里遗漏了什么?

CUDA中的所有错误代码和应用程序API(例如)都以C/C++
enum
类型记录并提供在头文件中。该设计旨在让程序员按名称而不是按值使用这些枚举。如果NVIDIA决定重新评估枚举值作为API大修或重构的一部分,那么按值使用它们将使天真或鲁莽的程序员有可能改变这些值。正如您所发现的,在CUDA开发的12多年中,这种情况已经发生过多次

虽然使用枚举名比使用值更容易键入,但它是未来的证明。另一种选择没有多大乐趣。这并不是你不想设计任何你关心的关于值的代码的原因,因为它可以而且可能会在将来的某个时候崩溃


希望这个答案有助于它成为最后一个。

什么都没有。它们是枚举,应该按名称使用,而不是按值使用。这就是他们的全部观点。委婉地说,期望这些价值永远保持不变是天真的。请看一个关于库布拉斯等价物的例子,确切地说明为什么这是一个如此糟糕的理想;我希望这些值会被弃用或添加,但我不会对枚举值进行如此彻底的更改。我看看能不能在这个目录上找到一个古老的文档页。但在这种情况下,我必须将CUDA错误映射到一个更大的内部统一错误代码列表中的一个范围(使用了许多其他API,它们都有自己的错误),并且系统是基于int而不是基于文本的…@Talonmes我查看了8.0运行时文档(NVidia网站上仍然在线的最旧的一个),在该列表中,代码30显示为“cudaErrorUnknown”,而不是现在给出的值999。这个列表实际上是连续的,从1到大约80,与今天的情况也大不相同。好了。如果你添加一个答案而不是一个注释,我很乐意将其标记为这样。请记住最后一句:)我已经设计了一种方法,将这个代码库的内部
fixed int->internal enum->text
系统映射到
相对int+manufacturer code->internal enum->text
系统,所以从现在起,所有这些都会很好。