Уровень сложности повторных компонентов оказывает значительное влияние на масштабируемые результаты компиляции. Можно попробовать различные способы реструктурировать модель на повторные компоненты, чтобы определить оптимальную настройку.
Например, рассмотрите эту модель блока батарей.
Целая модель имеет контроллер и объект. Модель объекта управления, показанная на предыдущем рисунке, является блоком батарей, который состоит из 16 идентичных модулей батареи. Каждый из этих модулей батареи, в свою очередь, состоит из двух взаимосвязанных подсистем: элемент батареи и контролирующий модуль, как показано на следующем рисунке.
Поскольку сложность допускающего повторное использование компонента оказывает значительное влияние на масштабируемую эффективность компиляции, сила модели должна быть реструктурирована в различный набор допускающих повторное использование компонентов, чтобы улучшать производительность. Одним важным фактором, который оказывает негативное влияние на эффективность, является количество интерфейсных переменных (внешние связи) допускающего повторное использование компонента. Из-за этого масштабируемая компиляция, вероятно, будет более эффективной, если вы будете основывать допускающие повторное использование компоненты на модуле, состоящем из двух подсистем направления, а не на каждой отдельной батарее и контроле модульных подсистем.
Используйте инструмент Advisory, чтобы анализировать различные опции реструктуризации и определить оптимальную настройку:
Запущенный sscScalableAdvisor
на модели и предоставлении имена 32 отдельных подсистем (16 элементов батареи и 16 контролирующих модулей), в массиве ячеек, как второй входной параметр. Рассмотрите статистику компиляции и результаты возможности многократного использования компонента.
Попробуйте различную настройку. Используя опцию Create Subsystem from Selection, создайте виртуальную подсистему из каждой пары подсистем направления, так, чтобы каждый модуль батареи был представлен одной подсистемой.
Реструктурированная модель может выглядеть так.
Запущенный sscScalableAdvisor
снова, и на этот раз предоставьте массив ячеек, который содержит 16 имен подсистемы модуля в качестве второго аргумента. Каждая из подсистем модуля является более комплексной и имеет меньше внешних связей, чем отдельные батареи и контролирующие модули, и поэтому масштабируемая эффективность компиляции, вероятно, будет намного лучше.
Можно, вероятно, улучшать производительность компиляции еще больше путем реструктуризации модели в восемь повторных подсистем вместо 16. Анализируйте результаты эффективности и примите решение и на основе эффективности компиляции и на основе поддержания иерархии моделирования. Даже если реструктуризация модели на восемь допускающих повторное использование компонентов компилирует немного быстрее, вы можете хотеть обеспечить структуру, где один модуль батареи соответствует одной подсистеме.
Если вы определили оптимальную настройку модели, заменяете повторные подсистемы на допускающие повторное использование компоненты и включаете масштабируемую компиляцию, как описано в последних двух шагах Подготовки Вашей Модели для Масштабируемой Компиляции.
Масштабируемая компиляция является иерархической. Когда вы включаете масштабируемую компиляцию модели, компилятор пытается снова использовать артефакты компиляции каждой подсистемы, на которую ссылаются, и соединенной подсистемы в иерархии модели. Однако для моделей с глубокой иерархией на которые ссылаются или соединенных подсистем это поведение по умолчанию не может быть оптимальным.
Например, в модели батареи, обсужденной ранее, отдельные элементы батареи и контролирующие модули являются виртуальными подсистемами. Полагайте вместо этого, что эти компоненты представлены подсистемами, на которые ссылаются, или соединенными подсистемами. В этом случае реструктуризация модели в 16 модулей не улучшила бы масштабируемые результаты компиляции, потому что компилятор обработает каждый из этих 16 модулей как состоящий из двух допускающих повторное использование компонентов. Чтобы извлечь пользу из меньшего количества внешних связей и увеличенную сложность каждого из допускающих повторное использование компонентов, в дополнение к реструктуризации модели в 16 модулей, необходимо отключить масштабируемую компиляцию базовых подсистем в каждом модуле.
Точно так же, если ваша модель содержит соединенные подсистемы с глубокой иерархией, такие как соединенные библиотеки, отключите масштабируемую компиляцию в подсистеме библиотеки. Например, если у вас есть модель холодильника с несколькими идентичными баками, и каждый бак, в свою очередь, пользуется соединенной библиотекой водопроводных труб, вы можете хотеть отключить масштабируемую компиляцию этих соединенных библиотек. Таким образом, компилятор обрабатывает целый бак как один допускающий повторное использование компонент, вместо того, чтобы пытаться снова использовать артефакты компиляции из библиотеки водопроводной трубы.
Чтобы отключить масштабируемую компиляцию для определенной подсистемы, на которую ссылаются, или соединенной подсистемы в модели, введите:
simscape.scalable.subsystemConfig(blockPath,'set','off')
где blockPath
путь к экземпляру блока Subsystem Reference или блок Subsystem со ссылкой библиотеки, от корня модели. Эта установка влияет на все экземпляры этой подсистемы.
Например, ввод:
simscape.scalable.subsystemConfig('Refrigerator/Tank1/WaterPipeLibrary','set','off')
отключает масштабируемую компиляцию для всех экземпляров WaterPipeLibrary
во всех баках в Refrigerator
модель.
Чтобы восстановить настройку по умолчанию, введите:
simscape.scalable.subsystemConfig(blockPath,'set','auto')
Чтобы запросить установку подсистемы, введите:
setting = simscape.scalable.subsystemConfig(blockPath,'get')
Эта установка параметра подсистемы вступает в силу, только если масштабируемая компиляция включена для целой модели. Затем компилятор пытается снова использовать артефакты компиляции подсистем с auto
установка, но не рассматривает подсистемы с off
допускающая повторное использование установка.