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 ответов

8 просмотров

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

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

потому что в одном случае ты линейно бежишь по массиву, во втором прыгаешь через 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 - это увеличение нагрузки на процессор. Процессоры быстро превращаются в обогреватели при юзании оного.

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

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

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Добрый день! Хочу спросить совета. Хочется в скрипт добавить некую конструкцию, что скрипт создал файл, который нужно потом скопировать в определенное место. Нашел такой сп...
Mikhail
3
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
Карта сайта