我使用(py)CUDA编写了一个射线追踪器,并且获得了非常低的加速比;例如,在1000x1000图像中,GPU并行化代码仅比在CPU中执行的顺序代码快4倍。
对于每一条射线,我必须解决5个方程(射线追踪器使用本论文描述的过程生成黑洞图像),所以我的设置如下:每条射线在一个单独的块中计算,其中5个线程使用共享内存计算方程。也就是说,如果我想生成一个宽度为W
像素和高度为H
像素的图像,设置如下:
W
块x H
块。5
线程。最昂贵的计算是方程的分辨率,我用自定义Runge 4-5算法求解。
代码很长,很难在这么短的问题中解释,但是您可以在Github中看到它。CUDA内核是这里,Runge求解器是这里。使用完全相同的求解器的顺序版本的CPU版本可以找到在同一个回购中。
要求解的方程需要几个计算,我担心sin
、cos
和sqrt
等一些函数的CPU优化会导致较低的加速速度(?)
我的机器规格是:
我的问题是:
我明白这个问题可能过于具体,但如果你需要更多的信息,只要说出来,我会很乐意提供它。
发布于 2016-08-27 16:06:57
一根绳子有多长?这个问题没有答案。
是的,正如注释中所指出的,您正在使用一个完全不合适的块大小,这浪费了GPU大约85%的潜在计算能力。
是的,这个问题的答案。设置正确的执行参数大约是CUDA中实际性能调优要求的50%,您应该能够获得显著的性能改进,只需选择一个正常的块大小即可。除此之外,仔细的分析应该是您的下一个访问端口。
这个答案是从评论中收集起来的,并作为社区wiki条目添加,在没有足够的接近票数来结束它的情况下,将这个(非常广泛的)问题从未回答的列表中删除。
https://stackoverflow.com/questions/39171823
复制相似问题