gpt4 book ai didi

c++ - 在 C++ 中加速图像过滤器

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:47 25 4
gpt4 key购买 nike

我用 C++ 编写了一个图像过滤器。它采用 256 行的 32bpp 位图的每个像素(将像素逐行存储在连续数组中),对其在 5x5 区域内的相邻像素执行操作,并生成 4 个输出像素,使图像的分辨率为原始分辨率的 2 倍图像。这一切都在 CPU 上完成。

过滤器的运行速度没有我希望的那么快。我需要它始终在 16 毫秒以下运行。我可以通过多线程加速它,还是开销会不一致并且可能总共花费超过 16 毫秒的时间?有没有其他方法可以加快速度?

如果多线程可以加速,那么实现越具体越好。任何代码示例将不胜感激!

最佳答案

听起来您的问题是“普通并行”,因此多线程肯定可以帮助实现近乎线性的改进。这是一个经典的数据 segmentation 问题。您可以将图像 segmentation 为 N 个区域(N = 您想要的线程数)。每个区域都需要图像的 (Dimension/N+4) 像素(每个区域将有一些重叠像素,“Ghost Cells”,以容纳您正在应用的 5x5 内核)。然后所有线程都写入公共(public)“输出”区域的特定区域。由于线程不与它们的输出区域重叠,因此您不需要任何互斥锁或锁定。

例如,如果您有一张 256x256 的图像并且您使用 4 个线程:

  • 每个线程都得到一个 (256/4 + 4) = 68 像素的 strip 。它们自己独特的 64 像素区域和每侧 2 个额外像素。他们计算中心的 64 像素区域(外部像素仅用于 5x5 卷积核)
  • 或者,每个线程得到一个 132x132 的 block (每边 128x128 + 4),并执行相同的操作。

这是一种经典的 MPI segmentation 技术,但在许多其他库中也很容易实现。

关于c++ - 在 C++ 中加速图像过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24471000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com