如何计算GPU程序的加速?

时间:2013-01-15 20:29:41

标签: performance cuda gpgpu metrics

动机:我的任务是测量我的CUDA C代码的Karp-Flatt metricparallel efficiency,这需要计算加速。特别是,我需要将所有这些指标绘制为处理器数量 p 的函数。

定义: Speedup是指并行算法比相应的顺序算法快多少,定义为:

enter image description here

问题:我已在 CUDA C 中实施了我的算法,并已定时获取 Tp 。但是,在确定 Sp 时仍存在一些问题:

  • 如何在不完全重写代码的情况下观察 T1
    • 我可以在串口执行CUDA代码吗?
  • 当我运行具有不同线程数的不同内核时, p 是什么?
    • 是否提及否。线程或没有。整个运行时使用的处理器?
    • 由于这两个数量在整个运行期间也会有所不同,是最大值还是平均值?
    • 我如何限制我的代码在一部分处理器上运行或用更少的线程运行?

非常感谢。

2 个答案:

答案 0 :(得分:11)

要获得合理的加速度量,您需要实际的顺序程序。如果你没有,你需要编写最好的顺序版本,因为将高度调整的并行代码与垃圾串行实现进行比较是不合理的。

您也无法合理地将并行程序的1处理器版本与N处理器版本进行比较,以获得真正的加速度量。这样的比较告诉你加速从同一程序的P = 1到P = N,但是加速曲线的要点是为什么要建立一个并行程序(这通常更难,需要更复杂的硬件[GPU]和与使用更广泛可用的硬件和工具编写最佳顺序版本相比,工具[OpenCL]更有意义。

换句话说,没有作弊。

答案 1 :(得分:0)

在测量加速时,在大多数情况下,您必须从头开始完全写入串行和并行算法。没有特别的原因,P = 1的最佳并行算法与最优串行算法有任何共同之处。在大多数情况下,并行算法将需要做大量的额外工作,并且与最优的串行算法相比效率很低。