16

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

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

在此处输入图像描述

问题:我已经在CUDA C中实现了我的算法,并已将其计时为 get Tp。但是,在确定中仍然存在一些问题Sp

  • 如何在T1不从头开始完全重写我的代码的情况下进行观察?
    • 我可以串行执行CUDA代码吗???
  • p当我使用不同数量的线程运行不同的内核时 会发生什么?
    • 是不是指没有。线程或没有。整个运行时使用的处理器数量?
    • 由于这两个量在整个运行期间也会发生变化,它是使用的最大值还是平均值?
    • 我什至如何限制我的代码在处理器子集或更少线程上运行!?

非常感谢。

4

2 回答 2

11

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

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

换句话说,没有作弊。

于 2013-01-15T21:06:47.173 回答
0

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

于 2013-01-19T22:48:55.130 回答