170 похожих чатов

Помогите придумать маску битовую. Смысл следующий: я прохожусь одномерному массиву который

представляет из себя изображение. Если координата Y текущего пикселя меньше или равна максимальному значению Y в этом столбце, то значит я закрашиваю пиксель в красный цвет, если нет, то не трогаю пиксель.

По сути выражение должно выглядеть так.


Логика без маски такая:


if(width/i <= maxY_in_collumn)
{
image[i] = int_red;
}
else
{
Image = image;
}
С маской


Image[i] = image[i] ? mask ? currentY ? fillColor;
Там стоят вопросы, потому что я не придумал пока какие знаки туда ставить. Я конечно мог бы просто закрашивать не построкам, а по столбцам.



dataX = image.data() + x;
for(int i = 0; i < y; i++)
{
*dataX = color;
dataX += witdth;
}
Но как оказалось закрашивать изображение по столбцам очень дорого. Гораздо дешевле закрашивать по строчкам.

Провёл тесты о том как будет разница скорость заполнения одномерного массива по столбцам и по строкам.

"0.002529400000" - результат если заполнять по столбцам(то есть i+width)
"0.000290700000" - результат если заполнять по строкам(то есть просто i++)

Размер массива 1000x1000

14 ответов

32 просмотра

Ничего не понятно, но очень интересно

А у вас уже есть эти максимумы или вы их ещё должны найти? Самый банальный способ - за один проход найти все максимумы, за второй - закрасить. В обоих случаях можно бежать сквозным способом, перебирая индексы. Номер столбца есть значение текущего индекса по модулю количества столбцов

потому что в одном случае ты линейно бежишь по массиву, во втором прыгаешь через 1000 эелементов. Логично, что второй вариант будет сильно медленнее. А вот что ты там понаписывал про битовую маску я понять не смог вообще.

Дмитрий-Воронин Автор вопроса
Андрей Таусинов
А у вас уже есть эти максимумы или вы их ещё должн...

Да, максимумы будут вычислены. Все это будет происходить на raspberry pi 4, хочется скорости. Это по сути построчное действие над матрицей и вектором(вектор максимальных значений в столбце). Есть матрица двумерная, мы по её строке бежим и и закрашивем пиксели в зависимости от максимального значения в этом столбце. Я просто хочу сделать максимально простой код без if, что бы минимум операций было. Я вроде бы видел инструкцию в arm neon, название не помню, но звучит так: если меньше чем это, то делаем это. Это SSE инструкция которая позволяет делать эту операцию над вектором. Вот теперь надо точно посмотреть что она делает и может её удастся использовать.

Дмитрий Воронин
Да, максимумы будут вычислены. Все это будет прои...

Пока на твоем уровне умения программировать я бы не советовал тебе лезть в Neon или SSE. Там потребуется узучить тебе многое, а не просто интринсик заюзать.

Дмитрий-Воронин Автор вопроса
Viktor Chyzhdzenka
Пока на твоем уровне умения программировать я бы н...

Это что же там такого надо знать кроме названия вызова функций? Что я процессор сломать могу? Вот вчера ускорил с помощью SSE функцию преобразования координат в два раза. vmls функция, которaя делает a-(b*c). Формула которую ускорял такая: offsetX - (vectorX[i]*-scalex) Патом ещё round нужно сделать. Тоже с помощью sse сделал

Дмитрий Воронин
Это что же там такого надо знать кроме названия вы...

Ну, хозяин-барин. Вперед и с песней. Я только так и не понял нафига ты тогда сюда приходил.

Дмитрий Воронин
Это что же там такого надо знать кроме названия вы...

Это просто спортивный интерес или реально упёрся в производительность и приходиться оптимизировать ?

Дмитрий-Воронин Автор вопроса
Александр Водянников
Это просто спортивный интерес или реально упёрся в...

Ну вообще спортивный интерес), да и начальник требует что бы нагрузки на проц было как можно меньше.

Александр Водянников
Это просто спортивный интерес или реально упёрся в...

Если писать кривой код при работе с большими матрицами и тензорами при работе с картинками и видео, то гарантировано всё будет тормозить даже на последних процах от Интела.

Дмитрий Воронин
Ну вообще спортивный интерес), да и начальник треб...

Тебе к сведени. SSE, Neon, АVX - это увеличение нагрузки на процессор. Процессоры быстро превращаются в обогреватели при юзании оного.

Дмитрий Воронин
А зачем их придумали тогда?

Для того, чтобы считать нужное быстрее.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта