如何确定我的GPU是否进行16/32/64位算术运算?

时间:2017-04-18 17:38:51

标签: c++ cuda nvidia latency

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

谢谢!

1 个答案:

答案 0 :(得分:4)

  

如何确定我的卡是执行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位)以不同的速率进行所有3种类型的操作(浮点乘法或乘加或加法)或每个精度的吞吐量。关于表格,这些数字是每个时钟每个SM

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

  

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

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

为了发现这种延迟数据,有必要进行某种形式的微基准测试。早期和经常被引用的论文证明了如何为CUDA GPU做到这一点here。对于GPU的延迟微基准数据,没有一个单一的规范参考,基准程序也没有单一的规范参考。这是一项相当困难的工作。

  

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

这类问题明显偏离了SO。请阅读here所在的位置:

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