2017-04-18 33 views
1

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

谢谢!

回答

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位的能力的所有3种类型的操作(浮点乘法,或乘加,或添加)的,64位)以不同的速率或吞吐量为每个精度。关于该表格,这些数字是每个时钟和每个SM

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

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

正如我对你previous question已经提到的,这些延迟值未公布或指定的,而事实上,他们可以(做)从GPU到GPU的变化,从一个指令到另一种(如浮点乘法和浮点加法可能具有不同的延迟),并且甚至可以从CUDA版本改变为CUDA版本,对于通过一系列多个SASS指令仿真的某些操作类型。

为了发现这个延迟数据,有必要做一些形式的微基准测试。演示CUDA GPU如何完成的早期和经常引用的论文是here。对于GPU的延迟微基准测试数据,没有一个单一的标准参考,也没有一个标准的参考基准程序来做到这一点。这是一项相当艰巨的任务。

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

这类问题明显是针对SO的话题。请阅读here它指出:

“的问题,要求我们建议还是找一本书,工具,软件库,教程或其他异地资源是题外话堆栈溢出......”