Паралельный вызов функций

Создание приложений, библиотек, инсталляторов
Ответить
Аватара пользователя
Cat
adviser
adviser
Сообщения: 203
Зарегистрирован: 22 июл 2010, 09:53
Версия LabVIEW: 12
Контактная информация:

Паралельный вызов функций

Сообщение Cat »

Доброго времени суток форумчане!
Залип с вызовом функций! В приложении проект суть такая, существует отдельный SubVi с простым метрономом внутри, этот SubVi я вызываю в двух параллельных циклах, ставлю таймаут 250 мс в обоих циклах, счетчик итераций тикает параллельно. Ставлю в одном задержку 250мс, в другом 2500мс, счетчик итераций тикает параллельно! Вопрос почему? Получается, что на блок диаграмме SubVi вызывается последовательно, и пока не завершиться вызов в точке "А" вызов в точке "В" будет не возможен. Как победить? Может быть есть какая-то особенность вызова SubVi?
Вложения
тестированиевызова.rar
(5.79 КБ) 238 скачиваний
Чеширский Кот - совсем не тот, что чешет языком.
Аватара пользователя
ladik

Silver
developer
developer
Сообщения: 275
Зарегистрирован: 18 ноя 2014, 11:45
Награды: 1
Версия LabVIEW: 2015, 2019
Откуда: Екатеринбург
Благодарил (а): 4 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Паралельный вызов функций

Сообщение ladik »

По умолчанию VI в один момент времени может быть загружен в память только один раз. Т.е. когда VI выполняется другие VI не могут получить к нему доступ. В свойствах subVI необходимо изменить свойство Reentrancy. Это свойство позволяет создавать в RAM несколько копий VI.

https://zone.ni.com/reference/en-XX/hel ... eentrancy/
http://digital.ni.com/public.nsf/allkb/ ... 59006B57CC
Вложения
Reentrant.png
Дорогу осилит идущий.
Аватара пользователя
Cat
adviser
adviser
Сообщения: 203
Зарегистрирован: 22 июл 2010, 09:53
Версия LabVIEW: 12
Контактная информация:

Re: Паралельный вызов функций

Сообщение Cat »

ооо, спасибо!!
Чеширский Кот - совсем не тот, что чешет языком.
Аватара пользователя
Cat
adviser
adviser
Сообщения: 203
Зарегистрирован: 22 июл 2010, 09:53
Версия LabVIEW: 12
Контактная информация:

Re: Паралельный вызов функций

Сообщение Cat »

Вопрос второй, а в чем прелесть Shared clone reentrant execution? я так понимаю, что выгоднее использовать Preallocated clone reentrant execution, так как там все жестко детерминировано, четко и понятно. А в Shared clone reentrant execution еще не факт, что в пуле клонов останется свободный в нужное время, придется тратить время на резервирование и вызов. Не проще ли сразу использовать Preallocated?
Чеширский Кот - совсем не тот, что чешет языком.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3391
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: Паралельный вызов функций

Сообщение Artem.spb »

Вопрос не только в пуле.
Если в subVI хранятся данные, например, в сдвиговых регистрах, то однозначно Preallocated.
А если нужна только параллельность вызовов (например, функции чтения TCP могут параллельно работать с несколькими соединениями), то особой надобности заранее выделять нет. Не такие уж и большие затраты на вызов. В случае использования обычных subVI вас же не пугает необходимость "тратить время" на вызов функции?
Аватара пользователя
Cat
adviser
adviser
Сообщения: 203
Зарегистрирован: 22 июл 2010, 09:53
Версия LabVIEW: 12
Контактная информация:

Re: Паралельный вызов функций

Сообщение Cat »

В некоторых моментах пугает,так как некоторые subVI довольно громоздкие и при вызове задержки измеряются единицами секунд. Хотя именно в конкретном случае, вы правы это не критично.
Всем огромное спасибо!
Чеширский Кот - совсем не тот, что чешет языком.
Аватара пользователя
IvanLis

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

Re: Паралельный вызов функций

Сообщение IvanLis »

Cat писал(а):Вопрос второй, а в чем прелесть Shared clone reentrant execution? я так понимаю, что выгоднее использовать Preallocated clone reentrant execution, так как там все жестко детерминировано, четко и понятно. А в Shared clone reentrant execution еще не факт, что в пуле клонов останется свободный в нужное время, придется тратить время на резервирование и вызов. Не проще ли сразу использовать Preallocated?
Посмотрите: http://digital.ni.com/public.nsf/allkb/ ... 59006B57CC

Здесь грань между производительностью и выделяемой памятью.

Может показаться, что режим preallocate будет выигрывать по производительности, но возможна ситуация, когда из-за "перегрузки" памяти (использования Swap) производительность может упасть. Но в этом случае память будет выделяться отдельно для каждого экземпляра, что бывает очень важно, например в рекурсиях :crazy: .

В тоже время режим share clones создает первоначально два экземпляра. Если возникнет ситуация одновременной работы пяти экземпляров, то будут созданы еще три. Если такого не будет, то первоначальные два экземпляра будут вызываться в параллельно в разных местах.
Аватара пользователя
Cat
adviser
adviser
Сообщения: 203
Зарегистрирован: 22 июл 2010, 09:53
Версия LabVIEW: 12
Контактная информация:

Re: Паралельный вызов функций

Сообщение Cat »

Спасибо, IvanLis! Сейчас, ознакомлюсь!
Чеширский Кот - совсем не тот, что чешет языком.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Создание приложений»