Доброго времени суток форумчане!
Залип с вызовом функций! В приложении проект суть такая, существует отдельный SubVi с простым метрономом внутри, этот SubVi я вызываю в двух параллельных циклах, ставлю таймаут 250 мс в обоих циклах, счетчик итераций тикает параллельно. Ставлю в одном задержку 250мс, в другом 2500мс, счетчик итераций тикает параллельно! Вопрос почему? Получается, что на блок диаграмме SubVi вызывается последовательно, и пока не завершиться вызов в точке "А" вызов в точке "В" будет не возможен. Как победить? Может быть есть какая-то особенность вызова SubVi?
Паралельный вызов функций
- Cat
- adviser
- Сообщения: 203
- Зарегистрирован: 22 июл 2010, 09:53
- Версия LabVIEW: 12
- Контактная информация:
Паралельный вызов функций
- Вложения
-
- тестированиевызова.rar
- (5.79 КБ) 239 скачиваний
Чеширский Кот - совсем не тот, что чешет языком.
-
ladik
- developer
- Сообщения: 275
- Зарегистрирован: 18 ноя 2014, 11:45
- Награды: 1
- Версия LabVIEW: 2015, 2019
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: Паралельный вызов функций
По умолчанию VI в один момент времени может быть загружен в память только один раз. Т.е. когда VI выполняется другие VI не могут получить к нему доступ. В свойствах subVI необходимо изменить свойство Reentrancy. Это свойство позволяет создавать в RAM несколько копий VI.
https://zone.ni.com/reference/en-XX/hel ... eentrancy/
http://digital.ni.com/public.nsf/allkb/ ... 59006B57CC
https://zone.ni.com/reference/en-XX/hel ... eentrancy/
http://digital.ni.com/public.nsf/allkb/ ... 59006B57CC
Дорогу осилит идущий.
- Cat
- adviser
- Сообщения: 203
- Зарегистрирован: 22 июл 2010, 09:53
- Версия LabVIEW: 12
- Контактная информация:
Re: Паралельный вызов функций
Вопрос второй, а в чем прелесть Shared clone reentrant execution? я так понимаю, что выгоднее использовать Preallocated clone reentrant execution, так как там все жестко детерминировано, четко и понятно. А в Shared clone reentrant execution еще не факт, что в пуле клонов останется свободный в нужное время, придется тратить время на резервирование и вызов. Не проще ли сразу использовать Preallocated?
Чеширский Кот - совсем не тот, что чешет языком.
-
- professor
- Сообщения: 3409
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 176 раз
- Контактная информация:
Re: Паралельный вызов функций
Вопрос не только в пуле.
Если в subVI хранятся данные, например, в сдвиговых регистрах, то однозначно Preallocated.
А если нужна только параллельность вызовов (например, функции чтения TCP могут параллельно работать с несколькими соединениями), то особой надобности заранее выделять нет. Не такие уж и большие затраты на вызов. В случае использования обычных subVI вас же не пугает необходимость "тратить время" на вызов функции?
Если в subVI хранятся данные, например, в сдвиговых регистрах, то однозначно Preallocated.
А если нужна только параллельность вызовов (например, функции чтения TCP могут параллельно работать с несколькими соединениями), то особой надобности заранее выделять нет. Не такие уж и большие затраты на вызов. В случае использования обычных subVI вас же не пугает необходимость "тратить время" на вызов функции?
- Cat
- adviser
- Сообщения: 203
- Зарегистрирован: 22 июл 2010, 09:53
- Версия LabVIEW: 12
- Контактная информация:
Re: Паралельный вызов функций
В некоторых моментах пугает,так как некоторые subVI довольно громоздкие и при вызове задержки измеряются единицами секунд. Хотя именно в конкретном случае, вы правы это не критично.
Всем огромное спасибо!
Всем огромное спасибо!
Чеширский Кот - совсем не тот, что чешет языком.
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: Паралельный вызов функций
Посмотрите: http://digital.ni.com/public.nsf/allkb/ ... 59006B57CCCat писал(а):Вопрос второй, а в чем прелесть Shared clone reentrant execution? я так понимаю, что выгоднее использовать Preallocated clone reentrant execution, так как там все жестко детерминировано, четко и понятно. А в Shared clone reentrant execution еще не факт, что в пуле клонов останется свободный в нужное время, придется тратить время на резервирование и вызов. Не проще ли сразу использовать Preallocated?
Здесь грань между производительностью и выделяемой памятью.
Может показаться, что режим preallocate будет выигрывать по производительности, но возможна ситуация, когда из-за "перегрузки" памяти (использования Swap) производительность может упасть. Но в этом случае память будет выделяться отдельно для каждого экземпляра, что бывает очень важно, например в рекурсиях .
В тоже время режим share clones создает первоначально два экземпляра. Если возникнет ситуация одновременной работы пяти экземпляров, то будут созданы еще три. Если такого не будет, то первоначальные два экземпляра будут вызываться в параллельно в разных местах.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
- Cat
- adviser
- Сообщения: 203
- Зарегистрирован: 22 июл 2010, 09:53
- Версия LabVIEW: 12
- Контактная информация:
Re: Паралельный вызов функций
Спасибо, IvanLis! Сейчас, ознакомлюсь!
Чеширский Кот - совсем не тот, что чешет языком.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 1 Ответы
- 247 Просмотры
-
Последнее сообщение Artem.spb