32-битная обработка изображений быстрее, чем 24-битная обработка изображений при использовании инструкций simd?

Я посмотрел на набор инструкций sse и mmx, и нет никаких инструкций для 3-канальной обработки изображений. Конечно, для многих операций вы можете использовать одни и те же инструкции, например, усреднение двух изображений. Но когда речь идет о таких операциях, как разделение каналов или микширование различных каналов с помощью линейного преобразования, использование 32-битных изображений кажется намного проще.

Каковы характеристики производительности типичных задач обработки изображений с 24-битными и 32-битными изображениями?

2 ответа

Решение

24 бит / пиксель быстрее, если ваши изображения большие и простые операции (например, альфа-смешивание и т. Д.).

Очень часто операции по обработке изображений довольно просты, но вы выполняете миллионы из них. Таким образом, время, используемое для перемещения данных из основной памяти в ЦП, может легко влиять на производительность алгоритма.

Поэтому 24-битные / пиксельные изображения могут дать преимущество перед 32-битными / пиксельными изображениями, потому что данных для перемещения на 1/4 меньше.

Написание кода для обработки изображений, который хорошо работает с 24 бит / пиксель, является трудной задачей. Инструкции SSE на самом деле не соответствуют данным, поэтому вам нужно перемешать байты, а затем вам придется разбираться со всеми различными выравниваниями.

Если изображения, с которыми вы работаете, являются небольшими и помещаются в кэш l1 или l2, все будет иначе, и время ЦП будет доминировать в производительности. В этих случаях 32 бит / пиксель работает быстрее.

На новых процессорах x86 с PSHUFB (он же _mm_shuffle_epi8) разделение каналов может быть выполнено за несколько циклов, и это может быть дешевле, чем дополнительные обращения к памяти из-за увеличения ширины пикселя до 32 бит. На старых процессорах x86 без PSHUFB требуется много операций перемешивания или распаковки, а 32-битные пиксели намного эффективнее.

На процессорах ARM с разделением NEON каналы могут быть сделаны бесплатно модулем загрузки. На процессорах ARM без NEON разделение каналов может быть выполнено с помощью инструкций ARMv6 SIMD по цене около 3 инструкций на пиксель.

Другие вопросы по тегам