【问题标题】:Atomic operations in CUDA supported by specific GPU特定 GPU 支持的 CUDA 中的原子操作
【发布时间】:2013-10-28 05:42:48
【问题描述】:

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

【问题讨论】:

  • 你用的是什么GPU?

标签: visual-studio-2010 cuda nvidia atomic gpu


【解决方案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),您应该能够运行已成功编译的代码。

关于原子,compute 1.2 设备确实支持某些原子操作,包括某些版本的atomicMin。由于您还没有显示您的代码,因此我不能说除此之外的任何内容。

【讨论】:

    【解决方案2】:

    具有计算能力 1.3 的 CUDA 设备支持原子操作。尝试使用以下标志编译代码

     -arch sm_13
    

    【讨论】:

    • 正如我所说的,我正在使用 Visual Studio,并且我已经更改了项目属性 -> CUDA C/C++ -> 设备 -> 代码生成 -> compute_13,sm_13。所以我认为这不是一个解决方案。
    猜你喜欢
    • 2012-02-13
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多