我最近安装了CUDA 5(如果重要的话,我正在使用Visual Studio 2010 Express)。当我尝试在内核中的全局内存设备阵列上执行越界读访问时,CUDA现在给我一个错误(错误30'未知错误')。我想知道这个看似自动的越界错误检查是否是CUDA 5的新增功能。我不记得在早期版本中看到它。
此外,是否还有关闭此自动越界错误检查?打开这个功能迫使我在我的内核中添加额外的条件逻辑(而在我不使用越界结果之前)。
谢谢,
亚伦
答案 0 :(得分:1)
这是设备例外,它不是来自软件。它之前没有崩溃的唯一原因是纯粹的运气(可能还有较旧的编译器)。您不能依赖编译器行为(例如,即使使用旧编译器,您可能会看到不同优化级别的不同行为)
答案 1 :(得分:0)
考虑到我的经验,越界错误检查也在较旧的CUDA版本中,但它的行为并不严格。当一些线程超出已分配数组的边界时,启动具有更多线程和更大分配数组的内核会导致内核崩溃,而不是使用较小数组启动较小内核。
我想这个检查是由CUDA运行时系统完成的,并且无法如何关闭它。与@Roger Dahl达成一致,如果有这样的方法可以解决这个问题,那么写出界限肯定不会“好”。