对图像的位宽、通道做截取时候,耗时太久,是不是有比较成熟的方案?

  • 1 replies
  • 238 views
*

sisiy

  • *****
  • 147
    • 查看个人资料
 对图像的位宽、通道做截取时候,耗时太久,因为访存的局部性。。 我们有FPGA,但是对这种问题也没法优化。想到GPU似乎有较大的L1 cache ,是不是会比CPU FPGA更有优势?或者是不是有比较成熟的方案?

*

sisiy

  • *****
  • 147
    • 查看个人资料
答:GPU的确L1较大(特别是乘以SM数量后),但是对于图像处理来说,不能直接存放在L1里的。所以不能用这个和CPU/FPGA比较的。
关于图像的切分和拼接。这个主要瓶颈在于访存上,而不在于计算速度上。具体又可以分情况讨论:
如果数据(图片)本身已经在显存上了,那么直接用GPU处理是较好的。因为切分和拼接,等于都是特殊的显存<->显存的复制过程,此时一般的卡都具有几百GB/s访存速率,处理起来较好。

如果数据本身在内存上,则通过PCI-E传输到显存的时间本身,已经超过了用CPU这样处理一遍的时间,此时建议直接使用CPU处理。用GPU往往只会更慢。

第三则是如果数据后续依然需要在GPU上进行处理(多步), 则建议传输过来。因为除了这种简单的切片和拼接外,其他的过程往往都是计算密集型的,此时GPU和CPU相比完全不是同一个量级。应当使用GPU的。

第四则是应当考虑图像处理中的,常见的截取(无论是区域像素,还是特定的通道)应当和下一步的处理计算结合在一起,这个是常见的做法,也就是说:读取10K * 10K 的图片 ---> 保存成1K * 1K单通道 -> 将通道中的每个值都提亮50%(饱和),这个例子,如果原本是三步,其中第一步是你说的提取的过程的话,那么不妨直接改成GPU上:读取10K * 10K的图片 ---> 计算并保存修改后的单个通道,此时时间其实是一样的。






« 最后编辑时间: 五月 21, 2019, 03:47:46 pm 作者 sisiy »