Обходной путь для отсутствия поддержки динамической памяти во встроенных функциональных блоках MATLAB - PullRequest
2 голосов
/ 10 декабря 2010

Справочная информация:

Я унаследовал модель MATLAB для имитации дискретных событий и хочу автоматизировать и ускорить ее выполнение. Вместо того, чтобы вызывать sim (modelName) и запускать интерпретируемый код в MATLAB, я хотел бы найти решение, похожее на вызывающую систему ('modelName.exe ...'). Моя мотивация для этого исходит от первоначальных испытаний, которые показывают, что скорость увеличивается почти на 1000%. Мне удалось использовать мастерскую в реальном времени с целью Rapid Simulation для создания исполняемого файла со статическим распределением памяти. Проблема заключается в том, что в модели имеются встроенные функциональные блоки MATLAB, параметры которых будут меняться по размеру и форме при каждом запуске. И будет сотни, если не тысячи трасс.

Согласно документации MathWorks:

Динамическое распределение памяти не поддерживается для встроенных функциональных блоков MATLAB:

"Нельзя использовать динамическое выделение памяти для данных переменного размера во встроенных функциональных блоках MATLAB. Используйте ограниченные данные вместо неограниченных данных переменного размера."

Вопрос:

Каков потенциальный способ обойти это ограничение?

Мысли:

  • Используйте статические переменные размеров, которые являются достаточно большими, и дополнительно передайте переменные int / настраиваемые параметры, чтобы явным образом отобразить часть данных, в которую нужно перейти.
  • S-функции?
  • То, что я реализую сегодня: программно перекомпилировать симуляцию каждый раз, когда она вызывается для динамического генерирования статического кода.
  • Портируйте все на настоящий / современный язык программирования, такой как python или c ++.

Ключевые слова: Встроенное динамическое распределение памяти в MATLAB Семинар по дискретным событиям в реальном времени Simulink SimEvents Перестраиваемые параметры

Ответы [ 2 ]

2 голосов
/ 07 октября 2013

В продолжение этого года спустя ... Мы продолжили динамическую статическую перекомпиляцию, которую я реализовал в тот день в течение года или около того, затем другой разработчик статистики переписал его на c ++. Использование максимально возможного объема памяти при каждом запуске просто не было пустой тратой вычислительных ресурсов.

0 голосов
/ 11 января 2011

Вы должны просмотреть этот вебинар: http://www.mathworks.com/company/events/webinars/wbnr43180.html. Это объясняет автоматическое решение, подобное вашей первой мысли.

...