加快计算速度

时间:2013-04-11 21:20:34

标签: c cuda gpgpu

我有一个模拟应用程序,我用C和CUDA编写过。为了测量加速,我在两种情况下都记录了时间。在CUDA中,我使用CUDA事件来测量时间,然后将GPU的时间除以CPU(通常如此)。下面提供了加速的图像。

关于加速图的奇怪之处在于加速首先增加到55X然后减少到35X然后随着线程总数的增加再次增加。我不确定为什么会这样,以及我如何能够找出这种输出背后的原因。我正在使用带有448核的GTX 560ti GPU卡。每个块的线程数是1024(最大数量),因此每个SM一次有1个块。这是因为占用问题而发生的,我怎么能明确找出这种加速图背后的原因?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:3)

加速中的峰值似乎与CPU中的执行时间有关。分析GPU时间,似乎随着代理数量的增加而增加。但是,CPU时间(一般而言也增加了线性)的下降时间范围为[0.6,1.6] aprox,有些峰值范围为[2.6,3.1] aprox。

考虑到上述情况,您的最大加速比为55x,在[0.6,1.1] aprox范围内降低。因为你的CPU时间也减少了。因此,计算加速为CPU time / GPU time是正常的,结果较小。这同样适用于第二个,范围为[2.6,3.1]

我怎么能弄清楚这种加速图背后的原因?我猜CPU被一些外部事件(I / O,在CPU中运行的其他程序,OS ......)中断了。

为了更准确地计算加速,作为单独执行重复实验10次,即不要在主函数内部循环执行10次。通过10,20,30或甚至更多的单独执行,您可以计算平均时间,还可以计算方差。然后,研究执行时间:可以将一个或两个峰视为特定情况(忽略它们)。如果你看到一个趋势,那么就应该进行更深入的研究。