Artículos técnicos

Perspectivas de MathWorks

Mejora del rendimiento de simulaciones en Simulink


Escrito por:

  • Weiwu Li, MathWorks
  • Reid Spence, MathWorks
  • Guy Rouleau, MathWorks

22 minutos de lectura

Independientemente del nivel de complejidad del modelo, todos los usuarios de Simulink® desean mejorar el rendimiento de las simulaciones. Este artículo presenta numerosos consejos y técnicas prácticos para sacar el máximo rendimiento de los flujos de trabajo de simulación. 

Primeros pasos para mejorar el rendimiento de las simulaciones

En primer lugar, debe analizar el flujo de trabajo de simulación para entender cuántas veces el modelo necesita ejecutar las etapas de edición, inicialización y simulación. Por ejemplo, estos cuatro flujos de trabajo habituales tienen características muy diferentes. El modo y las opciones de simulación más adecuados para el rendimiento dependerán de cuál de estos cuatro flujos de trabajo utilice.

El primer flujo de trabajo es editar-actualizar-repetir (figura 1). Este flujo de trabajo es habitual cuando presiona Ctrl+D para garantizar que el modelo se actualice, pero aún no está listo para validar la simulación; también es habitual cuando realiza modificaciones importantes en los modelos.

Diagrama que muestra el flujo de trabajo de simulación editar-actualizar-repetir.

Figura 1. Flujo de trabajo editar-actualizar-repetir.

El segundo flujo de trabajo es editar-simular-repetir, que requiere editar la estructura e inicializar el modelo cada vez (figura 2).

Diagrama que muestra el flujo de trabajo de simulación editar-simular-repetir.

Figura 2. Flujo de trabajo editar-simular-repetir.

El tercer flujo de trabajo es ajustar-simular-repetir (figura 3). Se centra en el ajuste iterativo de algunos parámetros, sin necesidad de editar la estructura del modelo.

Diagrama que muestra el flujo de trabajo de simulación ajustar-simular-repetir.

Figura 3. Flujo de trabajo ajustar-simular-repetir.

El cuarto flujo de trabajo es el de multisimulación (figura 4). Suele implicar numerosas simulaciones con modelos verificados, en las que resulta útil delegar la ejecución en otros recursos.

Diagrama que muestra el flujo de trabajo de multisimulación.

Figura 4. Flujo de trabajo de multisimulación.

Otro factor que afecta a la elección de soluciones de rendimiento es qué etapa de la simulación domina el tiempo total de cálculo. Puede utilizar la información de tiempos del objeto SimulationMetadata que se devuelve en el objeto Simulink.SimulationOutput para ver qué proporción del tiempo total corresponde a la inicialización o a la ejecución. En el ejemplo siguiente, el rendimiento de este modelo está dominado por el tiempo de ejecución; por lo tanto, se recomienda centrarse en soluciones que aceleren la ejecución del modelo en lugar de la inicialización.

Puede consultar los metadatos de simulación del modelo utilizado en el flujo de trabajo más habitual para entender mejor las propiedades de la simulación. El objeto SimulationMetadata contiene información sobre una ejecución de simulación, como información del modelo, de tiempos y de ejecución. Puede obtener la información de tiempos accediendo a la propiedad out.SimulationMetadata.TimingInfo. Este es un ejemplo de la información de tiempos de los metadatos de simulación: 

 WallClockTimestampStart: '2021-12-16 10:57:15'
 WallClockTimestampStop: '2021-12-16 10:58:44'
 InitializationElapsedWallTime: 0.6918
 ExecutionElapsedWallTime: 87.8463
 TerminationElapsedWallTime: 0.4087
 TotalElapsedWallTime: 88.9468
 ProfilerData: 'Profiler is not enabled'

Según el flujo de trabajo de simulación concreto y las características del modelo (tiempo de inicialización frente a tiempo de ejecución, etc.), puede consultar rápidamente la tabla 1 para seleccionar y probar las técnicas adecuadas.

Técnicas Flujo de trabajo
Editar-actualizar-repetir Editar-simular-repetir Ajustar-simular-repetir Multisimulación
Modo de simulación   x x x
Fast Restart     x x
Caché de simulación x x x x
Referencia a modelo -
Compilación en paralelo
x x    
Referencia a modelo -
Carga incremental y
Recompilación
x x    
Simulink Profiler x x x x
Solver Profiler   x x x
Modificación de modelos   x x x
Simulaciones en paralelo       x

Tabla 1. Técnicas habituales para mejorar el rendimiento de las simulaciones.

Selección del modo de simulación correcto

Simulink proporciona tres modos de simulación: Normal, Accelerator y Rapid Accelerator (figura 5). Como indican sus nombres, el modo Accelerator suele ser más rápido que el modo Normal, y el modo Rapid Accelerator, todavía más. Cada aumento de velocidad suele implicar sacrificar flexibilidad, interactividad o capacidades de diagnóstico. En muchos casos, si puede prescindir de una de estas capacidades, al menos temporalmente, la velocidad de simulación mejorará.

Opciones de modo de simulación: Normal, Accelerator y Rapid Accelerator.

Figura 5. Modos de simulación de Simulink.

En el modo Normal, Simulink interpreta el modelo durante cada ejecución de la simulación. Si modifica el modelo con frecuencia, este suele ser el modo preferible, ya que no requiere un paso de compilación independiente, a diferencia de los modos Accelerator y Rapid Accelerator.

En el modo Accelerator, Simulink compila el modelo en un motor de ejecución en memoria, lo que elimina la sobrecarga entre bloques de una simulación interpretada en modo Normal. El modo Accelerator admite el depurador y el generador de perfiles, pero solo un conjunto limitado de diagnósticos en tiempo de ejecución. El modo Accelerator suele utilizarse cuando el tiempo de simulación es mucho mayor que el de compilación.

En el modo Rapid Accelerator, Simulink compila un ejecutable independiente del modelo que puede ejecutarse en un proceso aparte. Solo puede utilizar el modo Rapid Accelerator cuando el modelo completo admite la generación de código. Este modo restringe la interacción con el modelo durante las simulaciones. Por ejemplo, el modo Rapid Accelerator no admite la depuración. Al igual que con el modo Accelerator, es mejor utilizar el modo Rapid Accelerator cuando las simulaciones tardan mucho más que la compilación única.

La elección del modo depende del flujo de trabajo. La figura 6 muestra el rendimiento de la simulación de un modelo hipotético en los modos Normal, Accelerator y Rapid Accelerator.

Gráfico que muestra el rendimiento de los modos de simulación Normal, Accelerator y Rapid Accelerator en un modelo hipotético.

Figura 6. Rendimiento de un modelo hipotético simulado en distintos modos de simulación.

Normalmente, se recomienda el modo Normal cuando se trabaja en un flujo de trabajo de “desarrollo”, en el que el modelo se modifica a menudo y se ejecutan actualizaciones del diagrama o simulaciones breves entre modificaciones. Por el contrario, utilice el modo Rapid Accelerator cuando desee ejecutar múltiples simulaciones sin realizar cambios estructurales en los modelos, como añadir o eliminar bloques.

Si sabe que el modelo no cambiará entre ejecuciones, puede indicar a Simulink que omita la inicialización del modo Rapid Accelerator configurando RapidAcceleratorUpToDateCheck como “off”. Tenga en cuenta que se ignorarán los cambios en los parámetros no ajustables. Si el modelo presenta una limitación que impide utilizar el modo Rapid Accelerator, utilice en su lugar el modo Accelerator.

Más información sobre el funcionamiento de los modos de aceleración, la elección de un modo de simulación, los motivos de la recompilación en modo Accelerator y la comparación del rendimiento.

Cuándo los modos de aceleración benefician más a unos modelos que a otros

En ocasiones, puede observar que algunos modelos se benefician más que otros de los modos Accelerator o Rapid Accelerator. Si el modelo no experimenta una mejora de rendimiento significativa, puede deberse a alguna de estas situaciones:

El algoritmo del modelo se encuentra principalmente en unos pocos bloques complejos, como el bloque Fast Fourier Transform o las tablas de búsqueda. Un modelo pequeño puede ejecutarse más lentamente en un modo de aceleración porque los bloques nativos están muy optimizados. En cambio, un modelo con numerosos bloques básicos tiene más probabilidades de beneficiarse de la aceleración.

El modelo contiene principalmente código compilado, como código de S-functions, bloques de Stateflow® y funciones de MATLAB®. El paso de compilación no aumentará más la velocidad del modelo.

Las ejecuciones de simulación incluyen fases de inicialización o terminación. Dado que los modos de aceleración solo actúan sobre la fase de simulación de cada ejecución, es posible que no aporten una gran mejora si las ejecuciones requieren fases de inicialización o terminación prolongadas. Para más detalles, consulte la sección Aceleración de la fase de inicialización de este artículo.

El modelo contiene bloques que no se pueden compilar, como bloques Interpreted MATLAB Function o System object de MATLAB en modo interpretado.

Activación de Fast Restart para simulaciones iterativas

En un flujo de trabajo de simulación típico de Simulink, cuando se presiona el botón Run, Simulink primero actualiza y compila el modelo, y después lo simula. Este proceso se repite en cada ejecución posterior. Sin embargo, si las simulaciones iterativas solo necesitan cambiar las entradas del modelo o los parámetros ajustables, normalmente no es necesario editar la estructura del modelo. En estos flujos de trabajo, la fase de inicialización suele ser innecesaria después de la primera ejecución y su coste se acumula rápidamente cuando se ejecutan cientos o incluso miles de simulaciones.

Simulink proporciona una funcionalidad muy útil denominada Fast Restart. Como su nombre indica, permite ejecutar simulaciones iterativas compilando el modelo una sola vez (figura 7).

Funcionalidad Fast Restart en Simulink.

Figura 7. Activación de Fast Restart en Simulink.

Con Fast Restart activado, el modelo no termina automáticamente después de cada ejecución. En su lugar, el modelo se vuelve a inicializar automáticamente con la información de inicialización guardada para el siguiente conjunto de simulaciones, sin recompilación.  

Cuando se utiliza Fast Restart, el modelo se bloquea y no es posible editar su estructura. Esto impide realizar cambios estructurales en el modelo hasta que finalizan las simulaciones. No obstante, sigue siendo posible cambiar los parámetros ajustables o las señales de entrada y ver su efecto en las simulaciones.

Puede activar Fast Restart desde la barra de herramientas, como se muestra arriba, y en simulaciones programáticas con las funciones sim y parsim.

Uso del punto de operación de la simulación

Normalmente, los ingenieros simulan un modelo de Simulink de forma iterativa con distintas entradas, condiciones de contorno y condiciones de operación. En muchas situaciones, estas simulaciones comparten una fase de arranque común en la que el modelo pasa de su estado inicial a otro estado. Por ejemplo, un motor eléctrico puede acelerarse hasta su velocidad de funcionamiento antes de probar distintas secuencias de control.

Con los puntos de operación de la simulación, puede guardar una instantánea de la simulación al final de la fase de arranque y, después, restaurarla para utilizarla como estado inicial de futuras simulaciones. Esta técnica no mejora la velocidad de simulación per se, pero puede reducir el tiempo total de simulación en ejecuciones consecutivas, ya que la fase de arranque solo debe simularse una vez (consulte la figura 8).

Ilustración que muestra cómo Fast Restart y la restauración del punto de operación reducen el tiempo total de simulación.

Figura 8. Uso de Fast Restart y la restauración del punto de operación.

Más información sobre el comportamiento del punto de operación.  

Ejecución de múltiples simulaciones en paralelo

Puede reducir el tiempo total necesario para ejecutar múltiples simulaciones independientes distribuyendo las tareas de simulación entre varios núcleos de procesamiento con Simulink y Parallel Computing Toolbox™. Puede reducir aún más el tiempo total de simulación con MATLAB Parallel Server™, que permite escalar las simulaciones a clusters y a la nube.

Los casos prácticos habituales de la ejecución de simulaciones en paralelo son el análisis de Monte Carlo, la optimización de diseños y los barridos de casos de prueba. Por ejemplo, puede configurar una simulación de Monte Carlo en la que varíe el valor de un parámetro en un rango predeterminado. Después, puede realizar simulaciones para cada valor del parámetro de forma independiente y en paralelo en varios núcleos.

Puede paralelizar muchas de las tareas de la optimización de diseños, como estimar parámetros del modelo a partir de datos de prueba, ajustar las ganancias del controlador para obtener la respuesta deseada, optimizar parámetros de diseño y realizar análisis de sensibilidad y de robustez. El tiempo total de simulación disminuye a medida que aumenta el número de procesadores utilizados.

Normalmente, hay dos opciones para configurar ejecuciones de multisimulación en paralelo: El panel Multiple Simulations o un script que llame a la función parsim. Puede configurar y ejecutar las simulaciones directamente con el panel Multiple Simulations de Simulink Editor (consulte la figura 9). En el panel Multiple Simulations, puede especificar valores de parámetros de bloque y variables del área de trabajo para las simulaciones. Si selecciona la opción “use parallel”, puede habilitar automáticamente la ejecución en paralelo de la simulación.

Panel Multiple Simulations en Simulink Editor.

Figura 9. Uso del panel Multiple Simulations para ejecutar simulaciones en paralelo.

También puede utilizar la construcción parsim para ejecutar simulaciones en paralelo con un script de MATLAB. En comparación con el panel Multiple Simulations, un script con parsim ofrece más flexibilidad y opciones avanzadas.  

Más información sobre la configuración y ejecución de simulaciones con el panel Multiple Simulations.

Más información sobre la ejecución de simulaciones en paralelo, el comando parsim y el uso de parsim con simulaciones en modo Rapid Accelerator.

Las referencias a modelos permiten incluir un modelo dentro de otro mediante un bloque Model. Cada instancia se denomina referencia a modelo. Al igual que los subsistemas, las referencias a modelos permiten organizar una jerarquía de modelos de gran tamaño (figura 10). 

Opciones de recompilación de referencias a modelos.

Figura 10. Opciones de recompilación de referencias a modelos. 

Las referencias a modelos ofrecen numerosas ventajas de rendimiento:

  • Carga incremental. Los modelos de referencia solo se cargan cuando es necesario.
  • Simulación acelerada. Las referencias a modelos permiten almacenar partes de una simulación en distintos archivos de modelo. Si una gran parte de la simulación no cambia, puede colocarla en un modelo referenciado en modo Accelerator. Esta parte solo se compilará una vez, la primera, y se inicializará y simulará más rápido en las ejecuciones posteriores.
  • Recompilación incremental. Si la opción de recompilación de referencias a modelos seleccionada es “If any changes in known dependencies detected”, los destinos de simulación que implementan estos modelos referenciados no se generan cada vez que se ejecutan simulaciones, sino que solo se regeneran si cambia el modelo referenciado o alguna de sus dependencias o interfaces. Esta opción es más rápida que la opción “If any changes detected”, ya que omite el paso de cálculo de la suma de comprobación del modelo. Si está seguro de que la estructura del modelo no cambia durante las simulaciones, puede configurar la opción Rebuild como “Never” para acelerar aún más el proceso.
  • Compilación en paralelo. En modelos que contienen grandes jerarquías de referencias a modelos, puede reducir el tiempo de generación de código y de compilación compilando los modelos de referencia en paralelo. Con Parallel Computing Toolbox o MATLAB Parallel Server, puede distribuir la generación de código y la compilación entre varios workers de MATLAB de la configuración.

Las referencias a modelos suelen utilizarse en entornos de equipo, en los que es posible ejecutar simulaciones basadas en componentes creados por otra persona. Simulink puede empaquetar estos artefactos de compilación en un único archivo de caché de Simulink con la extensión .SLXC para cada modelo de la jerarquía (figura 11).

Pantalla que resalta el archivo de caché .slxc de Simulink.

Figura 11. Archivo de caché de Simulink.

Con los archivos de caché de Simulink, Simulink solo compila los archivos desactualizados, siempre que el parámetro de configuración Rebuild esté establecido en “If any changes detected (default)” o “If any changes in known dependencies detected”. Puede compartir estos archivos SLXC y los archivos de modelo de Simulink correspondientes con el resto del equipo.

Cuando ejecuta la simulación en el equipo local, Simulink extrae los archivos derivados necesarios del archivo SLXC de cada modelo. Así, Simulink evita recompilaciones innecesarias y completa la simulación más rápido.

Además, los archivos de caché de Simulink se aplican a múltiples tipos de artefactos de compilación, que pueden no ser destinos de simulación de referencias a modelos (por ejemplo, destinos del modo Rapid Accelerator). Compartir estos archivos de caché de Simulink reduce significativamente el coste de recompilación en un flujo de trabajo en equipo.

Más información sobre las referencias a modelos.

Más información sobre los archivos de caché de Simulink.

Análisis de modelos para detectar cuellos de botella en la simulación

Simulink incluye capacidades integradas que ayudan a entender los modelos de forma sistemática, identificar cuellos de botella en el rendimiento de la simulación y mejorar la velocidad de simulación.

Performance Advisor

Performance Advisor se puede iniciar desde la pestaña Debug, junto con Simulink Profiler y Solver Profiler (figura 12).

Pestaña Debug de Simulink con la opción Performance Advisor resaltada.

Figura 12. Inicio de Performance Advisor.

Performance Advisor analiza el modelo y ejecuta distintas comprobaciones de condiciones y parámetros de configuración que podrían generar un rendimiento de simulación ineficiente. Performance Advisor proporciona recomendaciones para mejorar la configuración del modelo, así como mecanismos para corregir problemas de forma automática o manual.

Después de aplicar los cambios recomendados en el modelo, Performance Advisor puede verificar cuánto ha mejorado el rendimiento (figura 13). 

Configuración de Simulink Performance Advisor.

Figura 13. Simulink Performance Advisor.

Más información sobre Performance Advisor.

Simulink Profiler

Simulink ofrece dos tipos de generadores de perfiles para analizar los modelos con simulaciones lentas. Si no está seguro de cuál utilizar, consulte la figura 14 como guía rápida. Simulink Profiler sirve para determinar qué bloques consumen más tiempo de simulación, y Solver Profiler analiza por qué un solver de paso variable realiza determinados pasos.

Árbol de decisión para evaluar simulaciones lentas con Simulink Profiler o Solver Profiler.

Figura 14. Uso de Simulink Profiler y Solver Profiler.

Simulink Profiler permite cuantificar cuánto tiempo tarda cada fase de la simulación y cuánto tarda cada bloque en simularse. Simulink Profiler suele utilizarse con el modo Normal durante la fase de diseño para examinar el coste de tiempo de cada bloque. Simulink Profiler puede generar una gran cantidad de datos. Para minimizar la cantidad de datos que debe revisar, céntrese en los métodos que consumen más tiempo y en los que se llaman con más frecuencia.

Simulink Profiler identifica el origen de la ralentización de la simulación para que pueda evaluar manualmente el rendimiento del tiempo de ejecución de la simulación. También puede sustituir los bloques con mayor coste computacional por otros más ligeros para acelerar la simulación (figura 15).

Simulink Profiler aplicado a un modelo de un sistema de transmisión automática.

Figura 15. Simulink Profiler.

Más información sobre Simulink Profiler.

Solver Profiler

Cuando la simulación de un modelo con un solver de paso variable se ralentiza, realiza demasiados pasos pequeños o deja de responder, Solver Profiler puede ayudar a entender el comportamiento del solver e identificar los factores que afectan a la simulación.

Múltiples factores pueden afectar al comportamiento del solver y limitar la velocidad de simulación. Solver Profiler registra y notifica todos los eventos importantes que se producen durante la simulación de un modelo:

  • Eventos de cruce por cero
  • Eventos de excepción del solver
  • Eventos de reinicio del solver
  • Eventos de cálculo del jacobiano

Si el modelo incluye bloques de Simscape™, también puede examinar diversas magnitudes físicas de estos bloques con Simscape Results Explorer.

Solver Profiler presenta información gráfica y estadística sobre la simulación, la configuración del solver, los eventos y los errores. Puede utilizar estos datos para identificar las ubicaciones del modelo que generaron cuellos de botella en la simulación y tomar medidas, como modificar la rigidez del sistema para mejorar el rendimiento de la simulación.  

Solver Profiler suele utilizarse con solvers de paso variable para explicar por qué la simulación realiza demasiados pasos o por qué un paso es tan pequeño. Por otro lado, si el foco es saber por qué cada paso de simulación tarda demasiado en completarse, o si utiliza un solver de paso fijo, la herramienta adecuada es Simulink Profiler, descrito en la sección anterior (figura 16).

Solver Profiler que muestra información gráfica y estadística sobre una simulación.

Figura 16. Solver Profiler.

Más información sobre Solver Profiler, la detección de cruces por cero y los reinicios del solver.

Modificación y simplificación del modelo

La mayoría de las técnicas descritas hasta ahora requieren pocos cambios en el propio modelo, o ninguno. Puede obtener mejoras de rendimiento adicionales aplicando técnicas que implican modificar el modelo.

Aceleración de la fase de inicialización

Cuando se actualiza o se abre un modelo, Simulink ejecuta el código de inicialización de la máscara. Si tiene comandos de inicialización de máscara complejos con numerosas llamadas a set_param, considere la posibilidad de consolidar las llamadas consecutivas a set_param() en una sola llamada con varios pares de argumentos. Esto puede reducir la sobrecarga asociada a estas llamadas.

Más información sobre la ejecución del código de máscara.

Si utiliza scripts de MATLAB para cargar e inicializar datos, a menudo puede mejorar el rendimiento cargando MAT-files en su lugar. El inconveniente es que los datos de un MAT-file no están en un formato legible para personas; por lo tanto, puede resultar más difícil trabajar con ellos que con un script. Sin embargo, la carga suele inicializar los datos mucho más rápido que el script equivalente.

Más información sobre la carga de datos de un MAT-file en el área de trabajo.

Reducción de la complejidad del modelo

Simplificar el modelo sin sacrificar la fidelidad es una forma eficaz de mejorar el rendimiento de las simulaciones. Estas son tres formas de reducir la complejidad del modelo.

Sustituya un subsistema por una alternativa de menor fidelidad. En muchos casos, puede simplificar el modelo sustituyendo un modelo de subsistema complejo por una de estas opciones:

  • Un modelo dinámico lineal o no lineal creado a partir de datos de entrada-salida medidos con System Identification Toolbox™
  • Un modelo estadístico no lineal de alta fidelidad creado con Model-Based Calibration Toolbox™
  • Un modelo lineal creado con Simulink Control Design™
  • Una tabla de búsqueda

Puede mantener ambas representaciones del subsistema en una librería y utilizar subsistemas variantes para gestionarlas.

Más información sobre el uso de bloques de subsistemas configurables.

Más información sobre el trabajo con tablas de búsqueda, la optimización del espaciado de puntos de ruptura en tablas de búsqueda y la optimización del código generado para bloques de tablas de búsqueda.

Más información sobre el modelado de orden reducido.

Reduzca el número de bloques. Cuando se reduce el número de bloques del modelo, es necesario actualizar menos bloques durante las simulaciones, lo que agiliza las ejecuciones de simulación. La vectorización es una forma de reducir el número de bloques. Por ejemplo, si tiene varias señales paralelas que se someten a un conjunto similar de cálculos, combínelas en un vector y realice un único cálculo. Otra forma es habilitar la optimización Block Reduction en la sección Optimization > General de los parámetros de configuración.

Utilice el procesamiento basado en tramas. En el procesamiento basado en tramas, las muestras se procesan por lotes en lugar de una a una. Por ejemplo, si el modelo incluye un convertidor analógico-digital, puede recopilar las muestras de salida en un búfer y procesarlo con una sola operación, como una transformada rápida de Fourier. Procesar los datos en fragmentos de esta forma reduce el número de veces que es necesario invocar los bloques del modelo. En general, la sobrecarga de planificación disminuye a medida que aumenta el tamaño de trama. Sin embargo, las tramas más grandes consumen más memoria, y las limitaciones de memoria pueden afectar negativamente al rendimiento de los modelos complejos. Pruebe distintos tamaños de trama para encontrar el que maximice la ventaja de rendimiento del procesamiento basado en tramas sin causar problemas de memoria.

Reducción de la interactividad

En general, cuanto más interactivo es el modelo, más tiempo tarda en simularse. Los consejos de esta sección muestran formas de mejorar el rendimiento renunciando a cierta interactividad.

Deshabilite los diagnósticos de depuración. Algunas funcionalidades de diagnóstico habilitadas ralentizan notablemente las simulaciones. Puede deshabilitarlas en el panel Diagnostics del cuadro de diálogo Configuration Parameters.

Nota: La ejecución de los diagnósticos array bounds exceeded y solver data inconsistency puede generar una ralentización notable del rendimiento del modelo en tiempo de ejecución.

Deshabilite las animaciones de la simulación. De forma predeterminada, los gráficos de Stateflow resaltan los estados activos actuales y animan las transiciones de estado que se producen durante la ejecución del modelo. Esta funcionalidad es útil para la depuración, pero ralentiza la simulación. Para acelerar las simulaciones, cierre todos los gráficos de Stateflow o deshabilite la animación. Del mismo modo, si utiliza Simulink 3D Animation™, la visualización de SimMechanics™, FlightGear u otro paquete de animación 3D, considere la posibilidad de deshabilitar la animación o reducir la fidelidad de la escena para mejorar el rendimiento.

Más información sobre la aceleración de simulaciones en Stateflow.

Ajuste los parámetros específicos de los visores y gestione los visores mediante subsistemas habilitados. Si el modelo contiene un visor scope que muestra una gran cantidad de puntos de datos y no puede eliminar el scope, pruebe a ajustar los parámetros del visor para sacrificar fidelidad a cambio de velocidad de renderizado. No obstante, tenga en cuenta que, si utiliza el diezmado para reducir el número de puntos de datos representados, corre el riesgo de pasar por alto transitorios breves y otros fenómenos que serían evidentes con más puntos de datos. Puede colocar los visores en subsistemas habilitados para controlar con más precisión qué visualizaciones se habilitan y cuándo.

Más información sobre el efecto de la configuración de parámetros de visores de señales scope en el rendimiento.

Uso de funciones de MATLAB en lugar de bloques Interpreted MATLAB Function

Para llamar a una función de MATLAB desde un modelo de Simulink, utilice un bloque MATLAB Function en lugar de un bloque Interpreted MATLAB Function o una S-function de MATLAB. El bloque MATLAB Function es la alternativa más rápida. Admite la generación de código C embebible. Aunque el bloque MATLAB Function no admite todas las funciones de MATLAB, el subconjunto del lenguaje de MATLAB que admite es muy amplio.

Para encontrar rápidamente todos los bloques Interpreted MATLAB Function del modelo, utilice Performance Advisor.

Más información sobre el trabajo con el bloque MATLAB Function.

Registro de grandes volúmenes de datos. Cuando registre grandes cantidades de datos (por ejemplo, en modelos que incluyen bloques To Workspace, To File o Scope), utilice el diezmado o limite la salida registrada a la última parte de la simulación. Evite registrar datos redundantes (por ejemplo, registre el tiempo una sola vez) y datos superfluos (por ejemplo, registre valores enteros en lugar de valores double cuando sea posible). La anulación del registro también permite controlar qué señales se registran sin recompilar el destino de simulación para el modo Accelerator.

Más información sobre la exportación de datos de simulación.

Otras técnicas útiles

Estas técnicas se aplican a determinados modelos; si el modelo se ajusta a los patrones descritos, probablemente pueda utilizarlas para acelerar las simulaciones.

Optimización de la aceleración por hardware

Instrucción única, datos múltiples (SIMD) es una técnica de procesamiento en paralelo a nivel de datos que realiza la misma operación sobre múltiples puntos de datos simultáneamente. Muchas CPU modernas disponen de instrucciones SIMD que, por ejemplo, realizan varias sumas o multiplicaciones a la vez. En operaciones de cálculo intensivo con bloques compatibles, las funciones intrínsecas SIMD podrían mejorar el rendimiento de la simulación.

Simulink admite SIMD para la aceleración por hardware en todos los modos de simulación que utilizan tecnologías de generación de código (por ejemplo, los modos Accelerator y Rapid Accelerator).

Simulink proporciona un parámetro de configuración para controlar el tipo de SIMD en el panel Simulation Target. En las opciones de aceleración por hardware, la opción predeterminada (“leverage generic hardware”) está disponible en todas las CPU x86 y no requiere recompilación. La otra opción (“leverage native hardware”) depende de la CPU. Si la CPU admite conjuntos de instrucciones SIMD más recientes, como SSE2/AVX2/AVX512, esta opción podría ofrecer una velocidad de simulación aún mayor (figura 17).

Opciones de aceleración por hardware en Simulink.

Figura 17. Configuración de las opciones de aceleración por hardware. 

Cuando se utiliza un destino de simulación, son muchos los factores que determinan si SIMD está disponible o si puede mejorar la velocidad de simulación. Puede utilizar Performance Advisor, descrito anteriormente, para ejecutar la comprobación “check hardware Acceleration Settings” en Simulation Target y saber si SIMD resulta útil para el modelo concreto.  

Más información sobre la aceleración por hardware.

Aprovechamiento de la simulación multinúcleo

En Simulink existen diversas técnicas para acelerar una única simulación distribuyendo algunas partes del modelo para su ejecución multinúcleo. Estas técnicas no se aplican a todos los modelos, pero pueden resultar útiles en casos prácticos concretos.

Simulación multinúcleo de dominios de flujo de datos. Si modela y simula en Simulink un sistema de procesamiento de señales de cálculo intensivo o de procesamiento de señales multifrecuencia, los dominios de flujo de datos mejorarán el rendimiento. El dominio de flujo de datos es un nuevo dominio de ejecución que simula mediante un modelo de cálculo denominado flujo de datos síncrono. El dominio de ejecución de flujo de datos está controlado por los datos y puede simular con varios núcleos.

Para especificar el flujo de datos como dominio de ejecución de un subsistema, establezca el parámetro Domain en Dataflow con Property Inspector. Los dominios de flujo de datos particionan automáticamente el modelo y simulan el sistema con varios subprocesos para mejorar el rendimiento de la simulación (figura 18).

Especificación del flujo de datos como dominio de ejecución en Property Inspector.

Figura 18. Dominio de ejecución de flujo de datos.

Puede utilizar el botón Run Analysis de la pestaña Multicore para analizar el rendimiento de la simulación del dominio de flujo de datos. Puede generar perfiles del modelo, calcular el tiempo de ejecución de cada bloque, detectar el paralelismo existente en el modelo y particionarlo en varios subprocesos. Puede sugerir un valor de latencia para aumentar aún más el rendimiento de la simulación mediante la segmentación de la ejecución de los bloques. El análisis de la figura 19 sugiere que la latencia debe establecerse entre 0 y 2 para obtener el mejor rendimiento. 

Análisis del dominio de flujo de datos para el rendimiento de la simulación.

Figura 19. Análisis del dominio de flujo de datos para el rendimiento de la simulación.

Más información sobre el dominio de flujo de datos.

Simulación multinúcleo con componentes de cosimulación. El modelo de simulación puede incluir componentes de cosimulación. Un componente de cosimulación puede ser un bloque S-Function implementado como pasarela de cosimulación entre Simulink y herramientas de terceros o código personalizado. También puede ser una FMU en modo de cosimulación importada en Simulink o un bloque Model en modo Accelerator. Si estos componentes de cosimulación son seguros para subprocesos y pueden ejecutarse en varios subprocesos. Ser seguro para subprocesos significa que el bloque puede trabajar con varios subprocesos que acceden a datos, recursos y objetos compartidos sin conflictos.

No todos los modelos tienen componentes de cosimulación que puedan ejecutarse en varios subprocesos. Además, la cosimulación en varios subprocesos solo admite el modo de simulación Normal. De forma predeterminada, Simulink configura todos los modelos y bloques aptos para la ejecución en varios subprocesos. Si es posible mejorar el rendimiento, Simulink ejecuta automáticamente todos los modelos en varios subprocesos.

Más información sobre la cosimulación multinúcleo.

Uso de la simulación multinúcleo con un subsistema For Each. El subsistema For Each es un subsistema de Simulink que repite la ejecución del algoritmo durante un paso de simulación para cada elemento de un subarray de una señal de entrada o de un array de parámetros de máscara. Si el modelo contiene subsistemas For Each de cálculo intensivo, podría acelerar la simulación ejecutando las iteraciones del subsistema For Each en varios subprocesos.

La simulación multinúcleo de un subsistema For Each solo admite el modo de simulación Rapid Accelerator. De forma predeterminada, la compatibilidad con la simulación en varios subprocesos del subsistema For Each está habilitada. Simulink genera perfiles de simulación automáticamente de forma dinámica. La ejecución en paralelo solo se habilita cuando se detectan ventajas de rendimiento. Puede utilizar el parámetro de modelo 'MultithreadedSim' para habilitar o deshabilitar manualmente la simulación en varios subprocesos.

Más información sobre el uso de un subsistema For Each.

Aplicación de técnicas y medición de resultados

Para ilustrar la eficacia relativa de estas técnicas en un proyecto real, medimos la mejora del tiempo de simulación obtenida aplicando algunos de los cambios sugeridos anteriormente a un modelo de un sistema de transmisión automática (figura 20).

Modelo de Simulink de un sistema de transmisión automática.

Figura 20. Modelo de Simulink de un sistema de transmisión automática.

Para mejorar el rendimiento, primero utilizamos Performance Advisor para ejecutar las comprobaciones y aplicamos estos cambios sugeridos:

  • Desactivación de diagnósticos costosos que comprueban la incoherencia de datos del solver, la división por matriz singular, la salida Inf o NaN de bloques, la comprobación del rango de simulación y el exceso de los límites de arrays
  • Sustitución de los bloques Interpreted MATLAB Function por funciones de MATLAB (este es el cambio con mayor efecto por sí solo.)
  • Activación de las optimizaciones Block reduction
  • Scopes cerrados y desactivados

Estos cambios redujeron el tiempo de simulación de 57 segundos a 3,3 segundos de media. Con el modelo optimizado, ahora podemos aplicar el modo Rapid Accelerator y simulaciones en paralelo para comparar el rendimiento de estas técnicas (tabla 2).

Modelo original, modo Normal, ejecución en serie, Fast Restart desactivado 5.731 segundos
Modelo mejorado, modo Normal, ejecución en serie, Fast Restart desactivado 328 segundos
Modelo mejorado, modo Normal, ejecución en serie, Fast Restart activado 307 segundos
Modelo mejorado, modo Rapid Accelerator, ejecución en serie, con RapidAcceleratorUpToDateCheck desactivado  236 segundos
Modelo mejorado, modo Normal, simulaciones en paralelo, Fast Restart activado (4 workers locales) 198 segundos
Modelo mejorado, modo Rapid Accelerator, simulaciones en paralelo, con RapidAcceleratorUpToDateCheck desactivado (4 workers locales) 85 segundos

Tabla 2. Tiempo de 100 iteraciones de cada modelo para 2.000 segundos de tiempo de simulación. Sistema utilizado: Lenovo T490s con CPU Intel® Core™ i7-8665U (1,9 GHz, 2112 MHz, 4 núcleos), 32 GB DDR4 2400 MHz PC4-19200 SODIMM, unidad: SSD de 1 TB, Windows 10 Enterprise, MATLAB R2022a.

Publicado en 2022


Productos utilizados: Simulink, Parallel Computing Toolbox

Perfiles profesionales

Weiwu Li

Weiwu Li is a product manager responsible for simulation capabilities of Simulink and Simulink Compiler. Prior to joining MathWorks in 2016, he had many years of experience in the automotive industry as a system controls engineer. Weiwu has a Ph.D. in controls engineering from Zhejiang University, an M.S.M.E. from The Ohio State University, and an M.B.A. from Purdue University.

Guy Rouleau

Guy Rouleau is a consulting advanced support engineer at MathWorks and has been supporting Simulink users since 2007. In his role, Guy works closely with customers on technical challenges, bringing his expertise in engineering systems and applied modeling to support advanced MATLAB and Simulink workflows. Guy is the author of the “Guy on Simulink” blog, where he shares tips and tricks he’s learned while supporting Simulink users. He holds a master’s degree in mechanical engineering from McGill University, in collaboration with the Canadian Space Agency.

Siga explorando