Оптимизация VI

Простейшие вопросы в области инженерной разработки
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

Программа вылетает потому-что не достаточно RAM.

RAM-2GB
Обрабатываемый файл CAN-Bus-Log 24MB. Конвертирую его в 2D Array.
Windows использует для себя мах. 5% от 2GB.
Что делает LabVIEW с остатком RAM мне не совсем понятно.

Пробовал обрабатывать 2D Array через shift register (на первой передачи уже вылетает ее не заканчивая). И через Queue. Результат тот же.

Есть какие ни будь идеи, как эту проблему можно обойти?

Желательно без использования Inplace (не понимаю как ей правельно пользоваться).
Например перенаправлять использование памяти после загрузки RAM больше 50% на жеский диск??? как это сделать?
Или еще лучше программно освобождать RAM??? Как?

Или все же надо с Inplace разбираться?
Аватара пользователя
mxdamage

Activity
assistant
assistant
Сообщения: 113
Зарегистрирован: 11 авг 2011, 15:45
Награды: 1
Версия LabVIEW: 2011
Откуда: Москва
Контактная информация:

Re: Оптимизация VI

Сообщение mxdamage »

Зачем помещать файл в память целиком?
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

mxdamage писал(а):Зачем помещать файл в память целиком?
Вопрос я не до конца понял. Поэтому 2 ответа:

(1) Потому что это обрабатываемый файл.
Дальнейшая работа идёт именно с ним. И он мне нужен целиком.

(2) Как по другому? В память помещаю не я, автоматически Labview. (Цитирую NI "
Функция которая обрабатывает данные, перенимает выделение памяти для данных. Если данные будут длительное время не использованны, тогда занимаемая ими память будет освобождена. Если данные записываються в Array или String происходит автоматическое выделение большего объема памяти для управления информацией.")
Именно поэтому и был вопрос о возможности управления памятью.
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

Анализ цитаты NI из VI- memory Requirements:
"Функция которая обрабатывает данные, перенимает выделение памяти для данных. Если данные будут длительное время не использованны, тогда занимаемая ими память будет освобождена. Если данные записываются в Array или String происходит автоматическое выделение большего объема памяти для управления информацией."

Второе предложение - как это понимать? T.e. информация будет потеряна? Ни когда такого не замечал. Очень не определенное на мой взгляд выражение - длительное время. Есть Timeout? Какой? Где?

Третье предложение - автоматическое выделение большего объема памяти. Насколько большего? Как этот выделенный объем памяти замерить? Когда конкретно он выделяется? И как им можно управлять?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5602
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 34 раза
Поблагодарили: 113 раз

Re: Оптимизация VI

Сообщение IvanLis »

Igor_G писал(а):Программа вылетает потому-что не достаточно RAM.

RAM-2GB
Обрабатываемый файл CAN-Bus-Log 24MB. Конвертирую его в 2D Array.
Windows использует для себя мах. 5% от 2GB.
Что делает LabVIEW с остатком RAM мне не совсем понятно.
Залейте файл данных и Вашу программу на какой-нибудь обменник, а ссылку здесь выложите.
Не понятно как Вы обрабатываете данные, возможно у Вас много копий данных создается при обработке.
Это вроде не такой большой объем, должно все нормально быть.
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

Вопрос по оптимизации поиска.

Стоит задача поиска в 2D Array String содержащей порядка 12 миллионов объектов.
Поиск по неограниченному числу поисковых слов (объектов) или их частей, как по позитивной так и по негативной логике.

String оптимирован почти до конца, но при таких объемах будет работать все равно не достаточно быстро. (Это можно уже сказать уверено).

Есть идея,
сконвертировать в начале всю строку в Binärcode. Поисковые слова конвертировать тоже в Binär. И поиск проводить естественно в Binär.
Есть предположение, что LabVIEW будет искать в Binär на много быстрее чем в String. И не смотря конвертирование туда и обратно будет большой выиграш по времени.

Делал кто нибудь что то подобное? Или это бредовая идея?

P.S. Вопрос резервирования памяти еще открыт ;о)
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Оптимизация VI

Сообщение mzu2006 »

Про поиск: Возможно имеет смысл освежить Кнута? Или соответствующий раздел Википедии (http://en.wikipedia.org/wiki/Category:S ... algorithms)
ЕМНИП, одна из последних LV олимпиад была построение этакого поиска в распределенном варианте.
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

IvanLis писал(а):
Igor_G писал(а): Залейте файл данных и Вашу программу на какой-нибудь обменник, а ссылку здесь выложите.
Не понятно как Вы обрабатываете данные, возможно у Вас много копий данных создается при обработке.
Это вроде не такой большой объем, должно все нормально быть.
Здесь Screenshot гл. VI с комментариями.
VI отвечающий за 2D Array выложен. Файл тоже. (Отсутствующие SubVI - косметические SubVI которые ни какого влияния на память не оказывают)
Вложения
Вопрос резервирования памяти.png
KonvertiereTabellendatei in 2D Array_15.02.12.rar
(20.1 КБ) 125 скачиваний
Trace BPH_40_HexSym.rar
(2.67 МБ) 132 скачивания
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

mzu2006 писал(а):Про поиск: Возможно имеет смысл освежить Кнута? ....
ЕМНИП, одна из последних LV олимпиад была построение этакого поиска в распределенном варианте.
Я в танке. Освежить Кнута?
Просто это будет работать? Если да то буду пробовать. Нет надо думать что то другое.
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Оптимизация VI

Сообщение mzu2006 »

http://ru.wikipedia.org/wiki/Искусство_программирования. Эти же алгоритмы расписаны в википедии по предыдущей ссылке. И один из них реализован на одной из прошлых олимпиад NI Russia,
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: Оптимизация VI

Сообщение IORIK »

Igor_G, покажите Screenshot подпрограммы, которая создает 2D массив строк, а также "Bild Header" и "Uhrzeit eigenfunc". Или сконвертите в версию 8.2.
Если в подпрограмме для выделения элементов из строки используется функция "Spreadsheet String To Array ", то в худшем случае у вас 2D массив будет состоять из 23 миллионов элементов. Максимально элемент строкового массива имеет около 80 символов = 80 байт. И, как мне кажется, менеджер памяти LV не будет выделять точное кол-во байт на каждый элемент массива.

ниже показан худший вариант, в диспетчере задач Win XP под LV у меня выделилось 400 Мб.
fig1.jpg
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

IORIK писал(а):Igor_G, покажите Screenshot подпрограммы, которая создает 2D массив строк, а также "Bild Header" и "Uhrzeit eigenfunc".
Нет проблем.
Вложения
создает 2D массив строк
создает 2D массив строк
Bild Header
Bild Header
Uhrzeit eigenfunc
Uhrzeit eigenfunc
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

mzu2006 писал(а):http://ru.wikipedia.org/wiki/Искусство_программирования. Эти же алгоритмы расписаны в википедии по предыдущей ссылке. И один из них реализован на одной из прошлых олимпиад NI Russia,
Освежить?
Не буду скрывать я и не знал о нем ;о)
За линк большое спасибо. Что я понял из быстрого прочтения, что идея стоящая. И работать действительно должна.
Значит будем пробовать.

Обложка третьего издания первого тома книги Кнута содержит цитату Билла Гейтса: «Если вы считаете себя действительно хорошим программистом…, прочитайте „Искусство программирования“ (Кнута)… Если вы сможете прочесть весь этот труд, то вам определённо следует отправить мне резюме».

Я это точно не осилю ;о). Да и Билла Гейтса уже на пенсии.
Какой из алгоритмов Кнута вы бы посоветовали? (т.е. что конкретно читать?)
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

ОСТОРОЖНО! Использование этого VI может привести к зависанию Win. или LabVIEW.
Сгенерирован экстра баг!

С этим VI я пытался доказать, что проблему создает не 2D Array String, a именно LabVIEW автоматическое резервирование памяти для shift register. Потом выяснилось, что аналогичная проблема есть и при использовании Queue.

VI сконвертирован в версию 8.2.
Вложения
Extra_Bug_KonvertiereTabellendatei in 2D Array_26.03.12_v.2_3.png
Extra_Bug_KonvertiereTabellendatei in 2D Array_26.03.12_v.2_3.vi
(26.36 КБ) 118 скачиваний
Igor_G
assistant
assistant
Сообщения: 126
Зарегистрирован: 06 ноя 2011, 14:10
Версия LabVIEW: 2012-2016
Контактная информация:

Re: Оптимизация VI

Сообщение Igor_G »

цитата:
LabVIEW 32-bit система поэтому она может получить мах. 4GB виртуальной памяти.

http://zone.ni.com/reference/en-XX/help ... ory_usage/

Это что значит мы умудрились 4GB забить? Круто. Только как ума не приложу. A что делать тем более.
Помогите понять!
Ответить

Вернуться в «Для чайников»