Скорость обработки, как функция места переменной?

Захват, обработка и генерирование сигнала
Ответить
ESeid

Автор
advanced
advanced
Сообщения: 150
Зарегистрирован: 30 мар 2011, 22:41
Награды: 1
Версия LabVIEW: 8.2-2013
Контактная информация:

Скорость обработки, как функция места переменной?

Сообщение ESeid »

Создаем рекурсивный алгоритм обработки сигнала, очень важный параметр - скорость обработки. На входе - массив, соответствующий стандартному видеокадру.
Заметил эффект, коему нигде не увидел описания: скорость обработки цикла зависит от места положения переменных в нем. Для проверки написал простенький алгоритм, вычисляющий почленную разницу двух массивов. Проверил в трех состояниях: 1. - обе переменные вне цикла, 2 - одна переменная внутри цикла, 3 - обе переменные внутри цикла. Скорость исполнения вычисляется, как время исполнения, деленная на количество циклов. Результат говорит сам за себя:
1. - 6360 циклов/сек.
2. - 1533 циклов/сек.
3. - 620 циклов/сек.
Господа знатоки! У кого-нибудь есть обьяснения этому странному падению скорости? И как с этим бороться?
Сам VI и фото всех трех состояний прилагаю.
Вложения
SpeedTest.vi
(16.74 КБ) 202 скачивания
SpeedTest BD.png
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: Скорость обработки, как функция места переменной?

Сообщение Kosist »

Я, может быть, и ошибаюсь, но объяснение, кажется, простое:
1. На входе в цикл создаются копии данных с контролов, в память. На каждой итерации происходит считывание не с локальных переменных, а с памяти - что довольно быстро.
2. В каждой итерации происходит считывание с локальной переменной - :labview: копирует данные с контрола (при этом нет переключения в user interface thread), а затем копирует их в буфер обмена данных.
3. Происходит считывание с двух локальных переменных каждую итерацию цикла.
Вот здесь - http://www.labviewcraftsmen.com/blog/ge ... s-by-index - интересно расписано, как :labview: записывает данные в контрол. Думаю, что считывание будет выполнятся в обратном порядке.
Мы делили апельсин - много наших полегло...
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Скорость обработки, как функция места переменной?

Сообщение dadreamer »

Ну да, тут особо добавить нечего.
1. Операция однократного копирования из транспортного буфера в ячейку памяти перед циклом. Дальше цикл на каждой итерации читает эту ячейку.
2 и 3. Операция многократного копирования - выполняется каждую итерацию. В 2 для одной переменной, в 3 для обеих.

Хотя это здесь не принципиально, но легко видеть, что в 1 используются фиксированные значения переменных, тогда как в 3 используются текущие значения. Это может быть важно в некоторых архитектурах (возможность поменять значения переменных "на лету").

ЗЫ: инициализацию переменных и Request Deallocation (смысл его использования?) надо привязать к рамке кейса, чтобы явно задать поток данных.
ESeid

Автор
advanced
advanced
Сообщения: 150
Зарегистрирован: 30 мар 2011, 22:41
Награды: 1
Версия LabVIEW: 8.2-2013
Контактная информация:

Re: Скорость обработки, как функция места переменной?

Сообщение ESeid »

Kosist, dadreamer, огромное спасибо за консультацию! Начал понимать, где собака порылась. ;)
dadreamer, Request Deallocation я поставил по инерции - я ее всегда ставлю. Рефлексы. ;)
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Скорость обработки, как функция места переменной?

Сообщение dadreamer »

ESeid писал(а):dadreamer, Request Deallocation я поставил по инерции - я ее всегда ставлю. Рефлексы. ;)
И как, помогает? :wink:
ESeid

Автор
advanced
advanced
Сообщения: 150
Зарегистрирован: 30 мар 2011, 22:41
Награды: 1
Версия LabVIEW: 8.2-2013
Контактная информация:

Re: Скорость обработки, как функция места переменной?

Сообщение ESeid »

dadreamer писал(а):И как, помогает? :wink:
- Ребе, как мне вернуть мужа от любовницы?
- Сара, возьми немножко волос с расчески мужа, заверни в бумажку с молитвой, которую я тебе напишу, и зарой безлунной ночью под порогом дома разлучницы.
- Ребе, и это поможет?
- Не помешает... ;)
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Обработка сигнала»