1

我最近安装了 CUDA 5(如果重要的话,我正在使用 Visual Studio 2010 Express)。当我尝试对内核中的全局内存设备阵列执行越界读取访问时,CUDA 现在给我一个错误(错误 30 '未知错误')。我想知道这种看似自动的越界错误检查是否是 CUDA 5 的新增功能。我不记得在早期版本中看到过它。

另外,有没有办法关闭这个自动越界错误检查?启用此功能会迫使我向内核添加额外的条件逻辑(而在此之前我不会使用越界结果)。

谢谢,

亚伦

4

2 回答 2

1

这是一个设备异常,它不是来自软件。它之前没有崩溃的唯一原因是纯粹的运气(并且可能是旧的编译器)。您不能依赖编译器的行为(例如,即使使用旧的编译器,您可能已经看到不同优化级别的不同行为)

于 2012-12-13T00:28:24.390 回答
0

考虑到我的经验,越界错误检查也在较旧的 CUDA 版本中,但它的行为并不十分严格。当某些线程超出分配数组的边界时,启动具有更多线程和更大分配数组的内核比启动具有更小数组的较小内核更容易导致内核崩溃。

我想这个检查是由 CUDA 运行时系统完成的,没有办法关闭它。同意@Roger Dahl 的观点,如果有这样的方法可以关闭这种检查,那么写越界肯定不会是“好的”。

于 2012-12-13T00:10:33.013 回答