如何计算GPU程序的加速?

mch*_*hen 16 performance metrics cuda gpgpu

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

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

在此输入图像描述

问题:我已经在CUDA C中实现了我的算法,并且已经计时了Tp.但是,在确定时仍存在一些问题Sp:

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

非常感谢.

Ira*_*ter 11

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

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

换句话说,没有作弊.