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