C 加速计算

C 加速计算,c,cuda,gpgpu,C,Cuda,Gpgpu,我有一个用C和CUDA编写的模拟应用程序。为了测量加速比,我记录了两种情况下的时间。在CUDA中,我使用CUDA事件来测量时间,然后将GPU的时间除以CPU(通常是这样)。下面提供了加速的图像 加速比图的奇怪之处在于,加速比先增加到55倍,然后降低到35倍,然后随着线程总数的增加而再次增加。我不知道为什么会发生这种情况,也不知道我如何才能找出这种输出背后的原因。我使用的是GTX 560ti GPU卡,有448个内核。每个块的线程数为1024(最大数),因此每个SM一次有一个块。这是因为占用率问题

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

加速比图的奇怪之处在于,加速比先增加到55倍,然后降低到35倍,然后随着线程总数的增加而再次增加。我不知道为什么会发生这种情况,也不知道我如何才能找出这种输出背后的原因。我使用的是GTX 560ti GPU卡,有448个内核。每个块的线程数为1024(最大数),因此每个SM一次有一个块。这是因为占用率问题吗?我怎样才能确定这种加速图背后的原因


加速的峰值似乎与CPU中的执行时间有关。分析GPU时间,它似乎随着代理数量的增加而线性增加。然而,CPU时间(通常也会线性增加)在
[0.6,1.6]
aprox范围内有下降时间,在
[2.6,3.1]
aprox范围内有一些峰值

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

我怎样才能找出这种加速图背后的原因呢?我猜CPU被一些外部事件(I/O、CPU中运行的其他程序、操作系统…)中断


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

如果您绘制CPU持续时间和GPU持续时间,而不是加速,这样您就可以将峰值隔离到CPU或GPU,这将非常有用。由于您没有提供算法、执行或计时方法的详细信息,因此没有人能够向您提供有用的反馈。我建议(1)跟踪并分析应用程序,(2)从提交工作到完成工作,使用高精度CPU计时GPU代码。嗨!谢谢您的合作。我有CPU和GPU的时间分别是我在编辑我的原始文章后上传的。实际上,我正在进行一个模拟,我已经测量了GPU和CPU的时间,只是模拟部分。模拟基本上是行人代理,他们根据一些规则在环境中移动,并具有全局规则。对于CPU时间测量,我使用了clock()begin=clock();对于(i=0;iI使用CUDA事件测量GPU时间,并将其转换为秒数。我不确定该怎么做,也不知道如何找出这种奇怪的加速特性背后的原因。如果您能指导我如何获得高精度的CPU时间,以及我在代码分析中应该看到什么,那将非常有帮助。我已经运行了我的applic在批处理模式中,代理的数量每次都会增加,线程的数量也会增加。我基本上不知道如何找到这种图形背后的原因。再次感谢!谢谢你的建议。我也以同样的方式思考,但我不确定,所以我决定将其发布在这里。当前很抱歉,我接受你的解决方案作为答案,我会按照你的建议去做。但是如果这不能解决异常情况,那么我会让你知道,然后我们可以再次讨论。谢谢你的支持。