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

28 просмотров

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

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

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

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

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Я вот подумал. SSE выполняет операции максимум с 64-битной точностью. А FPU - всегда с 80-битной. Разве не должно быть FPU точнее тогда?
The Bird of Hermes
13
как быть с принтером? такой подход прокатит?
zamtmn
12
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Карта сайта