我正在尝试找出某个问题是否适合使用CUDA将问题放在GPU上。
我基本上是在做一个基于一些边缘检测而变化的箱形滤波器。因此,对于每个像素,基本上有8种情况进行测试,然后发生其余的操作-典型的均值计算等等。在我的循环中出现这些switch语句会不会导致这个问题成为GPU的一个糟糕的候选者?
我真的不确定如何避免switch语句,因为这种边缘检测必须在每个像素上进行。我认为整个图像的边缘检测部分可以从处理算法中分离出来,你可以存储一个与每个像素使用哪个滤波器相对应的缓冲区,但这似乎会给算法增加很多预处理。
编辑:只是给出一些上下文-这个算法已经写好了,OpenMP已经在加速它方面取得了很好的效果。然而,我的开发盒上的8核与GPU中的512相比就相形见绌了。
发布于 2011-01-15 00:35:37
边缘检测、均值计算和互相关可以实现为2D卷积。卷积可以在图形处理器上非常有效地实现(相对于中央处理器的speed-up > 10, up to 100),特别是对于大型内核。因此,在GPU上重写图像过滤可能是有意义的。
虽然我不会使用GPU作为这种方法的开发平台。
发布于 2011-01-15 00:43:19
通常,除非您使用新的CUDA架构,否则您将希望避免分支。因为GPU基本上是SIMD机器,所以管道非常容易受到分支错误预测导致的流水线停滞的影响。
如果你认为使用GPU会带来很大的好处,可以做一些初步的基准测试,以获得一个大致的想法。
如果您想了解如何编写非分支代码,请访问http://cellperformance.beyond3d.com/并查看。
此外,调查在多个CPU核心上运行此问题可能也是值得的,在这种情况下,您可能需要查看OpenCL或英特尔性能库(如TBB)。
另一个针对图形处理器的问题的来源,无论是图形,计算几何或其他,是IDAV,数据分析和可视化研究所:http://idav.ucdavis.edu
发布于 2011-02-04 05:19:00
如果分支中存在空间一致性,那么分支实际上并不是那么糟糕。换句话说,如果您希望图像中相邻的像素块通过相同的分支,则性能影响将降至最低。
https://stackoverflow.com/questions/4692955
复制相似问题