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

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

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

3
задан Ralph Tandetzky 10 авг. '12 в 17:22
источник поделиться

2 ответов

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

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

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

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

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

4
ответ дан Nils Pipenbrinck 10 авг. '12 в 17:57
источник поделиться

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

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

3
ответ дан Marat Dukhan 10 авг. '12 в 17:54
источник поделиться

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