GPU的最佳性能

问题描述:


我被要求测量我的代码如何“高效”地使用GPU /峰值性能的百分比是算法实现的。我不知道如何做这个比较。现在我已经基本上让计时器放入我的代码并测量执行情况。我可以如何将此与最佳性能进行比较并找出可能的瓶颈? (我听说过视觉轮廓仪,但无法让它工作......它不断给我“无法加载输出”错误)。GPU的最佳性能

+1

这将是值得的探查器工作。 – jmilloy 2011-02-18 00:43:42

每张卡都有最大的内存带宽和处理速度。例如,GTX 480带宽为177.4 GB/s。你需要知道你的卡的规格。

首先要决定的是您的代码是内存绑定还是计算绑定。如果它明显是一个或另一个,这将有助于您专注于衡量正确的“效率”。如果你的程序是内存绑定的,那么你需要比较你的带宽和卡的最大带宽。

您可以通过计算您读/写的内存量和除以运行时间(我使用cuda事件进行计时)来计算内存带宽。下面是calculating bandwidth efficiency的一个很好的例子(查看并行缩减的白皮书)并使用它来帮助验证内核。


  1. 我不很懂确定效率反之,如果你ALU约束。你可以计算(或分析)指令的数量,但该卡的最大值是多少?

  2. 我也不确定在可能的情况下如果你的内核是内存绑定和ALU绑定之间的东西,该怎么做。

任何......?

一般来说,“高效”可能是您的程序使用多少内存和GPU周期(平均,最小,最大)的度量。那么在AVG(GPU周期)/最大GPU周期内,效率度量将会是avg(mem)/时间段内的总内存等。

然后,我会将这些指标与某些GPU基准测试套件(您可以假定其在使用大部分GPU时非常高效)中的指标进行比较。或者,您可以针对您选择的随机GPU密集型程序进行测量。那就是我该怎么做,但我从来没有想过尝试这么好运!

至于瓶颈和“最佳”表现。这些可能是NP-Complete问题,没有人可以帮助你。退出旧的分析器和调试器,开始通过代码工作。

+0

您可否详细说明如何进行第一部分? (找到最大/平均GPU周期)?如果有帮助为了计时目的,我现在使用cutStartTimer和cutStopTimer.Also是否可以使用SDK附带的bandwidthtest.cu程序? – Manish 2011-02-17 00:51:42

不能与分析器和microoptimisation帮助,但有一个CUDA运算http://developer.download.nvidia.com/compute/cuda/CUDA_Occupancy_calculator.xls,它改掉估计请问你的CUDA代码中使用的硬件资源,在此基础上的值:

Threads Per Block 
Registers Per Thread                
Shared Memory Per Block (bytes) 
+0

。我读了计算器附带的文档。但是我不确定如何找到每个线程值的每个块/寄存器的共享内存。我使用visual studio。我做了类似于 - > nvcc- ..(选项)..文件名从Windows命令提示符,但它没有工作。你能告诉我如何找到这些参数? ? – Manish 2011-02-17 07:51:25

+1

占用计算器只是试图帮助您确定内核的最佳配置,并帮助您确定是否低效地使用设备资源。它不会告诉你你的带宽或计算效率。 – jmilloy 2011-02-18 00:26:45