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