我在 CUDA 中编写了一个程序,它将在 GPU(nvidia geforce 310m)上执行。在内核中我使用了 atomicMin 函数。编译并运行后出现错误:“内核执行失败:<8> 无效的设备功能”。我认为这可能是由于我的卡不支持原子操作。我是对的还是还有其他需要考虑的事情?顺便说一下运行原子操作,我读到我需要在 Visual Studio 中进行更改:项目属性 -> CUDA C/C++ -> 设备 -> 代码生成 -> compute_13,sm_13。谢谢。
问问题
924 次
2 回答
2
sm_13
可能您的 GPU 与您正在编译的计算架构 ( ) 不匹配。
错误码8的描述driver_types.h
如下:
/**
* The requested device function does not exist or is not compiled for the
* proper device architecture.
*/
cudaErrorInvalidDeviceFunction = 8,
一个典型的原因是编译的二进制架构与设备架构不匹配。您没有提及您使用的是哪个 GPU,但我猜它不是sm_13
设备。
您可以通过运行 cuda deviceQuery 示例代码来确定您拥有的 GPU 设备及其计算架构和功能。
有关各种原子操作所需的计算架构的更多细节可以在文档中找到。请注意,一些原子函数早在sm_11
(计算 1.1)架构中就可用,包括该atomicMin
函数的某些版本。
编辑:基于您现在表明您的 GPU 是 GeForce 310m 设备的事实,这不是支持计算 1.3 的设备。因此指定sm_13
将不起作用。您的GeForce 310m 是计算 1.2 设备,因此如果您指定该架构 (sm_12),您应该能够运行已成功编译的代码。
关于原子,计算 1.2 设备确实支持某些原子操作,包括某些版本的atomicMin
. 由于您没有显示您的代码,因此我不能说除此之外的任何内容。
于 2013-10-19T14:01:05.943 回答
0
具有计算能力 1.3 的 CUDA 设备支持原子操作。尝试使用以下标志编译代码
-arch sm_13
于 2013-10-19T12:21:15.250 回答