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).