Распараллеливание, управление стековой, динамической памятью

Простейшие вопросы в области инженерной разработки

Распараллеливание, управление стековой, динамической памятью

Postby dakishi on 05 Sep 2019, 21:09

Добрый вечер!

Можете подсказать, каким образом я могу предотвратить распараллеливание процессов на блок диаграмме либо задать последовательность процессов ? Также, как я могу управлять выделением стековой и динамической памяти, выделением ресурсов процессора ?

Где об этом можно почитать ?
dakishi
junior
junior
 
Posts: 57
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Распараллеливание, управление стековой, динамической пам

Postby Kosist on 06 Sep 2019, 08:55

А зачем все это? LabVIEW было придумано специально для инженеров, которые не хотят, или не имеют времени/возможности учить языки программирования, и копаться во всем этом - но которым нужно чтобы приложение быстро и легко писалось без лишних заморочек, и делало то, что нужно: измеряло, анализировало данные, и т.д.
А все те действия, о которых Вы спрашивали - берет на себя LabVIEW компилятор, который достаточно умный и оптимизированный; и разработчику не нужно задумываться над динамической или стековой памятью, и чем-то в этом роде. Да, различные оптимизации нужно делать, но они немного на высшем уровне абстракции - как правильно работать с большими массивами, строками, и т.д. - но никто не работает с памятью "напрямую".
Какая у Вас задача? Для какого проекта нужны такие знания? Или это просто для общего развития?
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1009
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 282
CLAD I/O VIP students

Re: Распараллеливание, управление стековой, динамической пам

Postby dakishi on 06 Sep 2019, 09:07

А зачем все это? Какая у Вас задача? Для какого проекта нужны такие знания? Или это просто для общего развития?

Пока для учебных целей. Мне нужно продемонстрировать выделение статической и динамической памяти в явном виде, и, найти пример такой, чтобы показать разницу в быстродействии (т.е. во времени исполнения). Где мне об этом найти информацию - т.к. в справочнике Суранова, например, не нашел.
dakishi
junior
junior
 
Posts: 57
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0


Re: Распараллеливание, управление стековой, динамической пам

Postby dakishi on 06 Sep 2019, 11:17

Memory Manager
https://zone.ni.com/reference/en-XX/hel ... y_manager/

Спасибо! Можете подсказать, как создать соответствующий CIN файл для этой цели на блок диаграмме ?
dakishi
junior
junior
 
Posts: 57
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Распараллеливание, управление стековой, динамической пам

Postby dadreamer on 06 Sep 2019, 19:57

Спасибо! Можете подсказать, как создать соответствующий CIN файл для этой цели на блок диаграмме ?
Совсем не обязательно писать CIN или DLL для того, чтобы вызвать функции Менеджера :labview: :
Example_VI_BD.png
Example_VI_BD.png (8.67 KiB) Viewed 1175 times

Однако, вряд ли вам именно в таком ключе задачу поставили. Дело в том, что это функции низкого уровня и ими пользоваться приходится очень редко, и как правило при коммуникации с внешним кодом (DLL, .NET-сборки, ActiveX). Подавляющему большинству пользователей :labview: эти функции не нужны и даже не каждый о них знает. Как Kosist уже сказал, :labview: сам берёт на себя задачи выделения-свобождения памяти как в режиме разработки, так и в ран-тайме. Скорее, поставленная задача должна сводиться к демонстрации работы с распространёнными типами данных, как например кластер (статическая память) и массив (динамическая память).

Последовательность выполнения потоков задаётся обычной Sequence-структурой или проводом (например, error in/out). Как вариант, можно сделать простую машину состояний.

Выделение ресурсов ЦП (ядер?) можно далеко не везде задать. Опять же, :labview: старается сам оптимально распределить нагрузку по ядрам. Буквально прописать конкретное ядро можно в Timed Loop.
User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Распараллеливание, управление стековой, динамической пам

Postby dakishi on 08 Sep 2019, 10:35

Как я могу понять, что выделяется конкретно статическая или динамическая память под объект ? Ведь явно я её, динамическую, как например в С++, не выделяю, чтобы отличить от статической. Как можно измерить объем выделенной под объект памяти ?
dakishi
junior
junior
 
Posts: 57
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Распараллеливание, управление стековой, динамической пам

Postby dadreamer on 08 Sep 2019, 15:50

Attachments
2019-09-08_17-49-04.jpg
2019-09-08_17-49-04.jpg (38.69 KiB) Viewed 1092 times
2019-09-08_17-52-24.jpg
2019-09-08_17-52-24.jpg (4.38 KiB) Viewed 1091 times
User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Распараллеливание, управление стековой, динамической пам

Postby dakishi on 08 Sep 2019, 18:37

Спасибо за подробный ответ. Можете еще подсказать, где я могу найти менеджеры DSNewPtr, DSDisposePtr т.к. нигде не нашел, кроме как в мануале ?
dakishi
junior
junior
 
Posts: 57
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Распараллеливание, управление стековой, динамической пам

Postby dadreamer on 08 Sep 2019, 22:03

Спасибо за подробный ответ. Можете еще подсказать, где я могу найти менеджеры DSNewPtr, DSDisposePtr т.к. нигде не нашел, кроме как в мануале ?
Это не менеджеры, это функции. А менеджер, содержащий функции для работы с памятью, называется . Выше я выкладывал , его можно сохранить на диск и перетащить на диаграмму. В общем случае нужно взять Call Library Function Node с палитры Connectivity -> Libraries & Executables, открыть настройки узла (Configure...), прописать Library name = LabVIEW и в поле Function name выбрать нужную функцию. Само собой, требуется указать параметры функции в том виде, как они представлены в описании.
2019-09-09_0-00-52.jpg
Другим вариантом может быть создание собственной библиотеки и вызов её из :labview: (понадобится подключить extcode.h из папки \[LabVIEW]\cintools).
User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Распараллеливание, управление стековой, динамической пам

Postby dakishi on 10 Sep 2019, 19:34

Если я создаю файл библиотеки, можно в CIN прописать static переменную, чтобы выделить стат память явно ? Или есть стандартные функции для этой цели в библиотеке LabVEW ?
dakishi
junior
junior
 
Posts: 57
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Распараллеливание, управление стековой, динамической пам

Postby dadreamer on 10 Sep 2019, 20:39

User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Распараллеливание, управление стековой, динамической пам

Postby Vasiliy Baev on 11 Sep 2019, 09:54

Добрый вечер!
Также, как я могу управлять выделением стековой и динамической памяти.
Где об этом можно почитать ?

Возможно данная ветка обсуждения будет Вам интересна
http://labviewportal.ru/viewtopic.php?f=21&t=8971
User avatar
Vasiliy Baev
leader
leader
 
Posts: 510
Joined: 31 Oct 2011, 09:02
Location: Санкт-Петербург
Medals: 4
Activity (1) Gold (1) Bronze (2)
LabVIEW Version: 2013
Karma: 146
I/O VIP

Ускорение процесса при выделении стековой памяти

Postby dakishi on 15 Sep 2019, 20:44

Можете объяснить, почему выделение под процесс (подприбор) стековой памяти может ускорять его по сравнению с выделением под тот же процесс динамической памяти ? Либо, где можно почитать про это, чтобы разобраться ?

И где можно почитать в целом про структуру памяти ? Например, в С++ обычно выделяется отдельно память для констант и программного кода (младшие крайние разряды, на сколько помню, ОЗУ), статическая (младшие разряды), динамическая или куча(средние разряды), стековая (старшие разряды). Как дело обстоит в LabView ?
dakishi
junior
junior
 
Posts: 57
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Ускорение процесса при выделении стековой памяти

Postby dadreamer on 16 Sep 2019, 09:35

dakishi, зачем создали новую тему? Вопросы логически связаны с тематикой темы.

Можете объяснить, почему выделение под процесс (подприбор) стековой памяти может ускорять его по сравнению с выделением под тот же процесс динамической памяти ? Либо, где можно почитать про это, чтобы разобраться ?
Быстрый гуглинг подсказывает:
Программы на C++ используют под локальные и временные переменные так называемую автоматическую память (automatic storage). Обычно автоматическая память реализована поверх стека программы, поэтому ее называют стековой. Ее большой плюс – выделение и освобождение памяти выполняется крайне быстро (обычно одна инструкция процессора). Ее большой минус – относительно небольшой объем, попытка выделить память сверх этого объема приводит к так называемому переполнению стека и тогда программа аварийно останавливается.
https://habr.com/ru/company/abbyy/blog/131713/
Вот ещё:
That said, the virtual address of global data may be able to be calculated and hardcoded at compile time, the addresses of stack-based data are typically stack-pointer relative, while memory on the heap must almost always be accessed using pointers, which might be slightly slower on some systems - it depends on the CPU addressing modes and cycles, but it's almost always insignificant - not even worth a look or second thought unless you're writing something where millionths of a second are enormously important.
И см. далее по тексту. При желании очень много можно найти чтива на эту тему.
Есть смысл обратиться на форумы по C/C++ или WinAPI или куда-то ещё. Здесь развёрнутый ответ вы вряд ли получите, т.к. LV-программерам редко приходится задумываться о таких низкоуровневых вещах.
И где можно почитать в целом про структуру памяти ? Например, в С++ обычно выделяется отдельно память для констант и программного кода (младшие крайние разряды, на сколько помню, ОЗУ), статическая (младшие разряды), динамическая или куча(средние разряды), стековая (старшие разряды). Как дело обстоит в LabView ?

+ ссылки, что я в смежной теме
https://forums.ni.com/t5/LabVIEW/memory ... 9#M1054846
Как я уже писал ранее, для работы :vi: вся память выделяется в куче (heap). Хотя сам :labview: на Сях написан и очевидно использует все "плюшки" C++, включая работу со стеком, нативные классы, инлайн-операции и т.п. Хотите больше деталей - откройте :labview: отладчиком и смотрите. Ядро :labview: проприетарное и NI не описывают всех подробностей.
User avatar
dadreamer
professor
professor
 
Posts: 3411
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Next

Return to Для чайников

Who is online

Users browsing this forum: Google and 8 guests

cron