【问题标题】:How to determine if my GPU does 16/32/64 bit arithmetic operations?如何确定我的 GPU 是否进行 16/32/64 位算术运算?
【发布时间】:2017-09-14 16:27:06
【问题描述】:

我正在尝试在我的 Nvidia 卡上查找本机算术运算的吞吐量。在this 页面上,Nvidia 记录了各种算术运算的吞吐量值。问题是我如何确定我的卡是执行 16 位还是 32 位还是 64 位操作,因为每个卡的值都不同? 此外,我还想为我的卡计算这些指令的延迟值。有什么办法吗?就我的研究而言,它们并没有像吞吐量那样被记录下来。是否有用于此目的的基准套件?

谢谢!

【问题讨论】:

    标签: c++ cuda nvidia latency


    【解决方案1】:

    我如何确定我的卡是执行 16 位、32 位还是 64 位操作,因为每个卡的值都不同?

    在页面you linked 上,表格顶部列出了计算能力(针对每一列)。您的 GPU 具有计算能力。您可以使用deviceQuery cuda 示例应用程序来找出它是什么,或者查找它here

    例如,假设我有一个 GTX 1060 GPU。如果你在上面运行deviceQuery,会报告计算能力主版本为6,次要版本为1,所以它是计算能力6.1的GPU。你也可以看到here

    现在,回到您链接的表,这意味着标有 6.1 的列是感兴趣的列。它看起来像这样:

                                                Compute Capability
                                                        6.1 
    16-bit floating-point add, multiply, multiply-add   2     ops/SM/clock
    32-bit floating-point add, multiply, multiply-add   128   ops/SM/clock
    64-bit floating-point add, multiply, multiply-add   4     ops/SM/clock
    ...
    

    这意味着 GTX 1060 能够以 3 种不同的精度(16 位、32 位、64 位)以不同的速率或每个精度的吞吐量。关于表格,这些数字是每时钟每 SM

    为了确定整个 GPU 的总峰值理论吞吐量,我们必须将上述数字乘以 GPU 的时钟频率和 GPU 中的 SM(流式多处理器)的数量。 CUDA deviceQuery 应用程序也可以告诉你这些信息,或者你可以在线查找。

    此外,我还想为我的卡计算这些指令的延迟值。有什么办法吗?就我的研究而言,它们并没有像吞吐量那样被记录下来。

    正如我在您的previous question 中已经提到的那样,这些延迟值没有发布或指定,实际上它们可能(并且确实)从 GPU 更改为 GPU,从一种指令类型更改为另一种指令类型(例如浮点乘法和浮点point add 可能有不同的延迟),甚至可能从 CUDA 版本更改为 CUDA 版本,对于通过多个 SASS 指令序列模拟的某些操作类型。

    为了发现这些延迟数据,有必要进行某种形式的微基准测试。 here 是一篇早期且经常被引用的论文,展示了如何为 CUDA GPU 完成此操作。 GPU 的延迟微基准数据没有一个单一的规范参考,基准程序也没有一个单一的规范参考。这是一项相当艰巨的任务。

    是否有一些用于此目的的基准套件?

    这类问题显然与 SO 无关。请阅读here 的声明:

    “要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题不属于 Stack Overflow 的主题......”

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 1970-01-01
      • 2010-10-23
      • 2010-12-11
      • 2013-04-02
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多