Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance GPU的最佳性能_Performance_Cuda - Fatal编程技术网

Performance GPU的最佳性能

Performance GPU的最佳性能,performance,cuda,Performance,Cuda,我被要求测量我的代码使用GPU的“效率”有多高/算法达到的峰值性能的百分比有多高。我不确定如何进行这种比较。到目前为止,我基本上已经在我的代码中加入了计时器并测量执行情况。我如何将其与最佳性能进行比较,并找出可能的瓶颈?(我确实听说过VisualProfiler,但它无法正常工作。它一直给我“无法加载输出”错误)。通常,“有效”可能是衡量您的程序使用了多少内存和GPU周期(平均、最小、最大)。然后,效率度量将是该时间段的平均(mem)/总内存,依此类推,使用平均(GPU周期)/最大GPU周期 然


我被要求测量我的代码使用GPU的“效率”有多高/算法达到的峰值性能的百分比有多高。我不确定如何进行这种比较。到目前为止,我基本上已经在我的代码中加入了计时器并测量执行情况。我如何将其与最佳性能进行比较,并找出可能的瓶颈?(我确实听说过VisualProfiler,但它无法正常工作。它一直给我“无法加载输出”错误)。

通常,“有效”可能是衡量您的程序使用了多少内存和GPU周期(平均、最小、最大)。然后,效率度量将是该时间段的平均(mem)/总内存,依此类推,使用平均(GPU周期)/最大GPU周期

然后,我将这些指标与一些GPU基准测试套件中的指标进行比较(您可以假设它们在使用大多数GPU时非常有效)。或者,您可以根据您选择的一些随机GPU密集型程序进行测量。我会这么做的,但我从没想过要这么好运


至于瓶颈和“最佳”性能。这些可能是NP完全问题,没有人能帮你解决。拿出旧的探查器和调试器,开始按自己的方式处理代码。

无法帮助探查器和微优化,但有一个CUDA计算器,它尝试根据以下值估计CUDA代码如何使用硬件资源:

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

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

首先要确定的是您的代码是内存限制还是计算限制。如果它显然是一个或另一个,这将帮助你集中在正确的“效率”来衡量。如果您的程序内存有限,则需要将您的带宽与卡的最大带宽进行比较

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


  • 如果你是ALU绑定的,我不太知道如何确定效率。您可能可以计算(或分析)指令的数量,但卡的最大值是多少

  • 我也不确定在内核介于内存绑定和ALU绑定之间的情况下该怎么办


  • 有没有人…?

    你能详细说明一下第一部分怎么做吗?(查找最大/平均GPU周期)?如果这有助于计时,我现在就使用cutStartTimer和cutStopTimer。还有可能使用SDK附带的bandwidthtest.cu程序吗?我阅读了计算器附带的文档。但是我不确定如何找到每个块/每个线程值的共享内存。我使用visual studio。我使用了类似于->nvcc-…(选项)…windows命令提示符下的文件名,但它不起作用。您能告诉我如何找到这些参数吗?占用率计算器只是试图帮助您确定内核的最佳配置,并帮助您确定设备资源的使用效率是否低下。它不会告诉你你的带宽或计算效率。让探查器工作是值得的。谢谢jmilloy。我的实现显然是IO绑定的,所以我猜它的大部分是由内存传输占用的。所以我将应用计算bw效率的第一种技术。如果是“计算绑定”呢?