0

我在 CUDA 中编写了一个程序,它将在 GPU(nvidia geforce 310m)上执行。在内核中我使用了 atomicMin 函数。编译并运行后出现错误:“内核执行失败:<8> 无效的设备功能”。我认为这可能是由于我的卡不支持原子操作。我是对的还是还有其他需要考虑的事情?顺便说一下运行原子操作,我读到我需要在 Visual Studio 中进行更改:项目属性 -> CUDA C/C++ -> 设备 -> 代码生成 -> compute_13,sm_13。谢谢。

4

2 回答 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 回答