我查看了sse和mmx指令集,没有关于3通道图像处理的说明。当然,对于许多操作,您可以使用相同的指令,例如平均两个图像。但是当谈到通过线性变换解调频道或混合不同频道等操作时,使用32位图像似乎要容易得多。
24位与32位图像的典型图像处理任务的性能特征如何?
答案 0 :(得分:4)
如果图像很大且操作很简单(例如alpha混合等),则24位/像素会更快。
图像处理中的操作通常很简单,但是执行数百万次。因此,用于将数据从主存储器移入和移出CPU的时间很容易控制算法的性能。
因此,24位/像素图像可以提供超过32位/像素图像的优势,因为可以移动1/4的数据。
编写以24位/像素表现良好的图像处理代码虽然很痛苦。 SSE指令并不真正适合数据,因此您必须随机播放字节,然后必须处理所有不同的对齐。
如果您使用的图像很小并且适合l1或l2缓存,则情况会有所不同,CPU时间将主导性能。在这些情况下,32位/像素的执行速度更快。
答案 1 :(得分:3)
在具有PSHUFB(又名_mm_shuffle_epi8)的新x86 CPU上,可以在几个周期内完成分割通道,并且由于将像素宽度扩展到32位,因此可能比产生额外的存储器访问更便宜。在没有PSHUFB的旧x86 CPU上,它需要大量的shuffle或解包指令,32位像素效率更高。
在具有NEON分离功能的ARM CPU上,负载存储单元可以免费完成通道。在没有NEON分裂的ARM CPU上,可以使用ARMv6 SIMD指令完成通道,每个像素大约需要3条指令。