вопрос знатокам
От: MarcoPolo  
Дата: 10.04.20 07:57
Оценка:
Зачем может понадобится делать так

params.width = (width + 15) & ~15;


в контексте обработки изображений?
Re: вопрос знатокам
От: lpd Россия  
Дата: 10.04.20 08:02
Оценка: +3
Здравствуйте, MarcoPolo, Вы писали:
MP>
MP>params.width = (width + 15) & ~15;
MP>


Это округление до большего, кратного 16:
&~15 эквиваленто &0xfffffff0, т.е. сбросу младших 4 бит.
Скорее всего нужно для округления до границы большего блока размера 16.
1) Сколько тролля ни корми, все равно флеймить будет.
2) Заставь тролля C++ учить, он и последний стандарт применит.
Отредактировано 10.04.2020 8:04 lpd . Предыдущая версия . Еще …
Отредактировано 10.04.2020 8:04 lpd . Предыдущая версия .
Re: Округление
От: Qbit86 Россия
Дата: 10.04.20 08:07
Оценка:
Здравствуйте, MarcoPolo, Вы писали:

MP>Зачем может понадобится делать так


MP>
MP>params.width = (width + 15) & ~15;
MP>


MP>в контексте обработки изображений?


Выглядит как округление вверх с точностью до 16 (да, шестнадцати).
Например:
16 -> 16
17 -> 32
31 -> 32
32 -> 32
Глаза у меня добрые, но рубашка — смирительная!
Re: вопрос знатокам
От: kov_serg Россия  
Дата: 10.04.20 08:44
Оценка: +1
Здравствуйте, MarcoPolo, Вы писали:

MP>Зачем может понадобится делать так


MP>
MP>params.width = (width + 15) & ~15;
MP>


MP>в контексте обработки изображений?

Это называется выравнивание
Re: вопрос знатокам
От: andrey.desman Россия  
Дата: 10.04.20 08:48
Оценка:
Здравствуйте, MarcoPolo, Вы писали:

MP>Зачем может понадобится делать так


MP>
MP>params.width = (width + 15) & ~15;
MP>


MP>в контексте обработки изображений?


Просто выравнивание. Чтобы каждая строка изображения (ее адрес) был кратен 16. Например, для обработки через SSE (хотя для AVX2 маловато, а для AVX512 тем более).
Да, в конце каждой строки остается паддинг, зато по памяти все хорошо выровнено.
Re: вопрос знатокам
От: Videoman Россия http://www.htsproduction.com/
Дата: 10.04.20 10:56
Оценка: 2 (1) +1
Здравствуйте, MarcoPolo, Вы писали:

MP>Зачем может понадобится делать так


MP>
MP>params.width = (width + 15) & ~15;
MP>


MP>в контексте обработки изображений?


Оптимизированная версия общей формулы для выравнивания ширины по заданному значению: "alidned_width = (width + align — 1) / align * align". В случае если align — степень двойки, то " / align * align" можно заменить на "& ~(align — 1)"
http://www.gravatar.com/avatar/60560936caa07b944d4c3cecf1c06cc5?s=80&d=identicon
Отредактировано 10.04.2020 12:24 Videoman . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.