whale 6 10 июня, 2021 Опубликовано 10 июня, 2021 (изменено) · Жалоба Всем привет, приходят данные одномерный массив на 1600 байт, его надо налету осреднить самым простым способом for(z=2;z!=1600-3;z+=1) { if(Flag_3x3) data_main[z] = ( data_main[z-1]+ // осреднение по 3 data_main[z+1]+ data_main[z+0])/3; } при осреднении обработка данных заметно тормозится, можно как то ускорить осреднение и вообще непонятно откуда такие тормоза, вроде простые операции. Массив приходит с частотой 70 гц Изменено 10 июня, 2021 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 2 hours ago, whale said: можно как то ускорить осреднение и вообще непонятно откуда такие тормоза, вроде простые операции. Нам бы конкретики поболее) Цифры, архитектура, многозадачность/однозадачность и т.п. А уж за листинг вообще отблагодарим (вдруг у вас оптимизация выключена или ещё что=нить). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 11 июня, 2021 Опубликовано 11 июня, 2021 (изменено) · Жалоба Это windows 7 на большом брате без оптимизации билдер 6, оптимизация не помогает, совсем, поток один. Изменено 11 июня, 2021 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 18 minutes ago, whale said: Это windows 7 на большом брате без оптимизации билдер 6, оптимизация не помогает, совсем, поток один. Я пас. Только минутно удивлюсь, как на такой платформе могут быть тормоза с простейшей операцией? Может быть что-то другое тормозит ваш поток? Операции-то элементарные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 11 июня, 2021 Опубликовано 11 июня, 2021 (изменено) · Жалоба Ставим Flag_3x3 = 1 тормозит, =0 не тормозит, может слишком много данных. Может в options билдере что нить подправить ? Изменено 11 июня, 2021 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба Стоп, а типа данных-то какой? Я ведь машинально подумал на что-то типа float/int. а то у вас там может быть целый класс осредняется, а операторы арихметики перегружены) Блин, сразу не увидел. Что байты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба unsigned short data_main[num_main]={0}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба А что значит тормозит? Это в цифрах как? Не могу поверить, что проц в ПК не справляется с этим? Может быть переключение задач в винде смахивает на тормоза? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 11 июня, 2021 Опубликовано 11 июня, 2021 · Жалоба 8 часов назад, whale сказал: можно как то ускорить осреднение и вообще непонятно откуда такие тормоза, вроде простые операции. 1. Зачем многократно суммировать одни и те же значения? Надо просто вести скользящую сумму, и для вычисления каждой новой суммы одно значение (старое) вычитать из скользящей суммы и одно - прибавлять к ней (новое). Тогда будет только два суммирования/вычитания на итерацию. 2. Заменить деление умножением. 3. За одну итерацию выполнять вычисление не одной суммы, а нескольких подряд (будут меньше пустые траты на обработку цикла (переходы инкременты и т.п.)). 4. Если о входных данных известно, что они гарантированно не перекрывают весь диапазон возможных значений данного типа (например могут быть только в диапазоне: 0...63), то можно делать суммирование по N байт сразу. Например - 64-битными словами (а можно и больше - всякие MMX-расширения поддерживают вроде и 256-битные данные), а потом разделять на отдельные суммы). 8 часов назад, whale сказал: Массив приходит с частотой 70 гц Массив размером всего 1600 байт приходящий с частотой 70Гц вызывает тормоза на современном ПК??? А по сколько шт. данных суммируете? Реально по 3 или больше? Если первое - то не может тормозить такое на современном ПК, проблема в чём-то другом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
whale 6 11 июня, 2021 Опубликовано 11 июня, 2021 (изменено) · Жалоба Всем спасибо, иногда просто прилюдно задать вопрос уже заставляем мозг быстрее думать, оказывается тормозит именно выставление флага Flag_3x3 хотя он больше нигде не используется и выставляется в клике по чекеру, удивительное рядом... Вот так не тормозит совсем. Видно по таймеру да и на глаз заметно вывод данных. ps всех обманул, оказывается этот флаг еще тут запускает подпрограмку которая всех тормозила ) чудес не случилось if(Form6->CheckBox15->Checked) // if(Flag_3x3) {data_main[z] = ( data_main[z-1]+ data_main[z+1]+ data_main[z+0])/3;} Изменено 11 июня, 2021 пользователем whale Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 12 июля, 2021 Опубликовано 12 июля, 2021 · Жалоба Кстати, если вы так пытаетесь заменить значения средними (из 3х), то у вас ошибка. Усреднение элемента исказит значения следующего (вы переписываете текущее значение, и при вычислении следующего оно уже другое) Сделайте скользящую сумму, как Jcxz предложил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rmDAC 4 6 июня, 2023 Опубликовано 6 июня, 2023 · Жалоба Усреднение или сглаживание может зависеть от типа данных, нужно ввести проверку на случайные значения и максимум процент изменения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dvorkin 1 14 марта Опубликовано 14 марта · Жалоба On 6/11/2021 at 1:24 AM, whale said: for(z=2;z!=1600-3;z+=1) { if(Flag_3x3) data_main[z] = ( data_main[z-1]+ // осреднение по 3 data_main[z+1]+ data_main[z+0])/3; } Зачем вы на каждой итерации проверяете флаг? Быстрее будет if(Flag_3x3) {for() } 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться