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

Adi*_*ver 1 c++ cuda latency nvidia

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

谢谢!

Rob*_*lla 5

由于每个值都不相同,如何确定我的卡是否进行16位,32位或64位操作?

链接的页面上,表格顶部(每列)列出了计算功能。您的GPU具有计算能力。您可以使用deviceQuerycuda示例应用程序确定其含义,或在此处查找。

例如,假设我有一个GTX 1060 GPU。如果deviceQuery在其上运行,将报告计算能力的主版本6和次版本1,因此它是计算能力6.1 GPU。您也可以在这里看到。

现在,回到链接的表,这意味着标记为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
...
Run Code Online (Sandbox Code Playgroud)

这意味着GTX 1060能够以3种不同的精度(16位,32位,64位)以不同的速率或吞吐量进行所有3种类型的操作(浮点乘法,乘加或加)。精确。对于表,这些数字是每个时钟每个SM

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

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

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

为了发现延迟数据,有必要进行某种形式的微基准测试。此处经常引用一篇早期的论文,论证如何针对CUDA GPU做到这一点。没有针对GPU的延迟微基准数据的单一规范参考,也没有针对基准测试程序的规范参考。这是一项相当艰巨的任务。

为此有一些基准套件吗?

对于SO,这类问题显然是题外话。请此处注明:

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