[英]Atomic operations in CUDA supported by specific GPU
我已经在CUDA中编写了一个程序,该程序将在GPU(nvidia geforce 310m)上执行。 在内核中,我使用了atomicMin函数。 编译并运行后,出现错误:“内核执行失败:<8>无效的设备功能”。 我认为这可能是由于我的卡不支持原子操作。 我是对的还是要考虑其他事情? 通过运行原子操作的方式,我已经了解到需要在Visual Studio中进行更改:项目属性-> CUDA C / C ++->设备->代码生成-> compute_13,sm_13。 谢谢。
您的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示例代码来确定拥有的GPU设备及其计算架构和功能。
有关各种原子操作所需的计算体系结构的更多详细信息,可以在文档中找到。 请注意,某些原子函数早在sm_11
(计算1.1)体系结构中sm_11
可用,包括atomicMin
函数的某些版本。
编辑:基于您现在指示您的GPU是GeForce 310m设备的事实,这不是支持1.3版本的设备。 因此,指定sm_13
将不起作用。 GeForce 310m是计算1.2设备 ,因此,如果指定该体系结构(sm_12),则应该能够运行已经成功编译的代码。
关于原子,compute 1.2设备确实支持某些原子操作,包括atomicMin
某些版本。 由于您尚未显示代码,因此我无话可说。
具有计算功能1.3的CUDA设备支持原子操作。 尝试使用以下标志编译代码
-arch sm_13
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.