2012-08-10 60 views

回答

4

如果圖像很大並且操作很簡單(如混合等),24位/像素會更快。

很多時候圖像處理中的操作都非常簡單,但是您可以執行數百萬個操作。所以用於將數據從主內存移入和移出CPU的時間可以很容易地支配算法的性能。

因此,24位/像素圖像可以提供超過32位/像素圖像的優勢,因爲移動的數據少了1/4。

雖然寫入圖像處理代碼可以很好地處理24位/像素。 SSE指令並不適合數據,因此您必須隨機播放字節,然後您必須處理所有不同的對齊。

如果您正在使用的圖像很小並且適合l1或l2緩存,則情況會有所不同,並且CPU時間將會影響性能。在這些情況下,32位/像素執行速度更快。

+0

關於緩存的評論非常有趣。謝謝。 – 2012-08-11 11:02:26

+0

實際上,如果我沒有記錯的話,你可以做補丁(我認爲這叫做緩衝),並且在給定大小的補丁或塊上面進行工作,以適合L1或L2緩存。然後你沿矩陣移動你的工作塊。如果翻牌數很高,那麼快速緩存的訪問將抵消複製補丁的成本。 – 2012-08-12 21:21:30

3

在PSHUFB(aka _mm_shuffle_epi8)拆分通道的新x86 CPU上可以在幾個週期內完成,並且由於將像素寬度擴展到32位,所以可能比進行額外的存儲器訪問更便宜。在沒有PSHUFB的舊x86 CPU上,它需要大量的洗牌或解包指令,並且32位像素效率更高。

在NEON拆分的ARM CPU上,通道可由加載存儲單元免費完成。在沒有NEON分裂的ARM CPU上,通道可以使用ARMv6 SIMD指令完成,每個像素約3條指令。

+0

我忽略了PSHUFB的說明。好的提示。謝謝。 – 2012-08-11 11:03:13