我使用(py)CUDA对光线跟踪器进行编码,并且我获得了非常低的加速比;例如,在1000x1000图像中,GPU并行化代码比在CPU中执行的顺序代码快4倍。
对于每条射线,我必须解决5个方程(光线跟踪器使用this paper中描述的过程生成黑洞图像),所以我的设置如下:每个光线在一个单独的块中计算,其中5线程使用共享内存计算方程式。也就是说,如果我想要生成宽度为W
像素且高度为H
像素的图像,则设置为:
W
阻止x H
块。5
个帖子。最昂贵的计算是方程的分辨率,我用自定义Runge Kutta 4-5算法解决。
代码很长很难在如此简短的问题中解释,但你可以在Github中看到它。 CUDA内核为here,Runge Kutta求解器为here。可以找到具有完全相同解算器的顺序版本的CPU版本in the same repo。
要求解的方程涉及多个计算,我担心sin
,cos
和sqrt
等某些函数的CPU优化导致低速加速(?)
我的机器规格是:
我的问题是:
我理解这个问题可能过于具体,但如果您需要更多信息,请说出来,我很乐意提供。
答案 0 :(得分:4)
- 对于顺序代码,在GPU并行化光线跟踪器中获得3倍或4倍的加速是否正常?
醇>
一根绳子有多长?这个问题没有答案。
- 您是否在CUDA设置或代码中看到可能导致此行为的错误?
醇>
是的,正如评论中所述,您使用的是完全不合适的块大小,这会浪费大约85%的GPU潜在计算能力。
- 我错过了重要的事情吗?
醇>
是的,这个question的答案。设置正确的执行参数大约是CUDA中实际性能调整要求的50%,并且您应该能够在选择合理的块大小时获得显着的性能改进。除此之外,仔细分析应该是您的下一个停靠点。
[这个答案汇集了评论并添加为社区维基条目,以便在没有足够的密切投票来关闭它的情况下从未答复的列表中得到这个(非常广泛的)问题。