【发布时间】:2014-06-28 21:11:38
【问题描述】:
我用 C++ 编写了一个图像过滤器。它采用具有 256 行的 32bpp 位图的每个像素(将像素逐行存储在连续数组中),对其在 5x5 区域内的相邻像素执行操作,并生成 4 个输出像素以使图像的分辨率为原始图像的 2 倍图片。这一切都在 CPU 上完成。
过滤器的运行速度没有我想要的那么快。我需要它始终运行在 16 毫秒以下。我可以用多线程加速它,还是开销不一致并且总共可能需要超过 16 毫秒?有没有其他方法可以加快速度?
如果多线程可以加快速度,那么实现越具体越好。任何代码示例将不胜感激!
【问题讨论】:
-
我认为多线程会很困难,因为像素都相互依赖以进行最终输出。我曾经做过类似的事情,我计算了如果某个像素的相邻值低于某个阈值,那么变化不会很明显,所以忽略它们,直到它附近的像素会发生更多变化。我不知道这是否适用于您的具体情况。
-
@Ellery,
I think multi threading would be hard because the pixels all rely on each other for the final output,我相信,像素依赖于未修改的相邻像素。 -
我应该提到,输入像素永远不会被修改,每个输出像素都会被修改一次,但是由于每个输入像素都会读取其相邻像素,因此每个输入像素都会被读取多次。
-
为什么需要16ms以下的?如果是因为您的程序正在处理连续的帧流并且您希望达到 60 帧/秒,那么最好先确定您有多少个内核,然后将整个帧发送到每个内核,而不是细分每个帧在您可用的核心中。它也可能高度依赖于您的 CPU 缓存大小。
-
发布实现过滤器的处理代码的核心可能是个好主意,因为那里可能需要进行一些改进......
标签: c++ multithreading performance filter pixel