GPU是否适合大小写
我试图弄清楚某个问题是否是使用CUDA将问题呈现在GPU上的良好选择。
我基本上是做一个盒子过滤器,基于一些边缘检测而变化。 所以基本上有8种情况是针对每个像素进行测试的,然后其余的操作发生 - 典型的平均值计算等。 在我的循环中是否存在这些switch语句会导致此问题成为GPU的不良候选者?
我不确定如何避免开关语句,因为这个边缘检测必须发生在每个像素处。 我猜想整个图像可能会将边缘检测部分从处理算法中分离出来,并且可以存储与每个像素使用哪个滤镜相对应的缓冲区,但似乎会为算法添加大量预处理。
编辑:只是为了给出一些上下文 - 这个算法已经写好了,OpenMP已经被用于加速它的相当好的效果。 但是,我的开发箱上的8个内核与GPU中的512个内核相比显得很乏味。
边缘检测,平均计算和互相关可以实现为二维卷积。 卷积可以非常有效地在GPU上实现(加速> 10,相对于CPU高达100),特别是对于大型内核。 所以是的,它可能会在GPU上重写图像过滤。
尽管我不会使用GPU作为这种方法的开发平台。
通常情况下,除非您使用新的CUDA架构,否则您将希望避免分支。 由于GPU基本上是SIMD机器,因此分支预测失误导致管线延迟极大地影响并极大地影响管线延迟。
如果您认为通过使用GPU可以带来显着的好处,请执行一些初步的基准测试以获得一个粗略的想法。
如果您想了解如何编写非分支代码,请转至http://cellperformance.beyond3d.com/并查看。
此外,调查到在多个CPU内核上运行这个问题也可能是值得的,在这种情况下,你可能会想看看任的OpenCL或英特尔性能库(如TBB)
另一个去到源针对GPU的问题是它的图形,计算几何或以其他方式,是IDAV,研究所进行数据分析和可视化:http://idav.ucdavis.edu
如果分支中存在空间连贯性,分支实际上并不是那么糟糕。 换句话说,如果您希望图像中相邻的像素块通过相同的分支,则性能命中率会降至最低。
链接地址: http://www.djcxy.com/p/4327.html