En savoir plus sur Solver Profiler, la détection de passage par zéro et les réinitialisations du solveur.
Modification et simplification du modèle
La plupart des techniques décrites jusqu'à présent nécessitent peu, voire aucune, modification du modèle lui-même. Vous pouvez obtenir des améliorations de performance supplémentaires en appliquant des techniques qui impliquent des modifications du modèle.
Accélération de la phase d'initialisation
Lorsque vous mettez à jour ou ouvrez un modèle, Simulink exécute le code d'initialisation du masque. Si vous avez des commandes d'initialisation de masque complexes qui contiennent de nombreux appels à set_param, envisagez de regrouper les appels consécutifs à set_param() en un seul appel avec plusieurs paires d'arguments. Cela peut réduire le surcoût associé à ces appels.
En savoir plus sur l'exécution du code de masque.
Si vous utilisez des scripts MATLAB pour charger et initialiser des données, vous pouvez souvent améliorer les performances en chargeant plutôt des fichiers MAT. L'inconvénient est que les données d'un fichier MAT ne sont pas sous une forme lisible par l'homme et peuvent donc être plus difficiles à manipuler qu'un script. Cependant, le chargement initialise généralement les données beaucoup plus rapidement que le script équivalent.
En savoir plus sur le chargement de données d'un fichier MAT dans votre espace de travail.
Réduction de la complexité du modèle
Simplifier votre modèle sans sacrifier la fidélité est un moyen efficace d'améliorer les performances de la simulation. Voici trois façons de réduire la complexité du modèle.
Remplacer un sous-système par une alternative de moindre fidélité. Dans de nombreux cas, vous pouvez simplifier votre modèle en remplaçant un modèle de sous-système complexe par l'un des éléments suivants :
- Un modèle dynamique linéaire ou non linéaire créé à partir de données d'entrée-sortie mesurées à l'aide de System Identification Toolbox™
- Un modèle statistique non linéaire haute fidélité créé à l'aide de Model-Based Calibration Toolbox™
- Un modèle linéaire créé à l'aide de Simulink Control Design™
- Une lookup table
Vous pouvez conserver les deux représentations du sous-système dans une bibliothèque et utiliser des sous-systèmes variants pour les gérer.
En savoir plus sur l'utilisation des blocs de sous-système configurables.
En savoir plus sur l'utilisation des lookup tables, l'optimisation de l'espacement des points de rupture dans les lookup tables et l'optimisation du code généré pour les blocs Lookup Table.
En savoir plus sur la modélisation d'ordre réduit.
Réduire le nombre de blocs. Lorsque vous réduisez le nombre de blocs dans votre modèle, moins de blocs devront être mis à jour pendant les simulations, ce qui permettra d'accélérer les exécutions de simulation. La vectorisation est un moyen de réduire le nombre de blocs. Par exemple, si vous avez plusieurs signaux parallèles qui subissent un ensemble de calculs similaires, essayez de les combiner en un vecteur et d'effectuer un seul calcul. Une autre méthode consiste à activer l'optimisation Block Reduction dans la section Optimization > General des paramètres de configuration.
Utiliser le traitement par trames. Dans le traitement par trames, les échantillons sont traités par lots au lieu d'un à la fois. Si votre modèle comprend un convertisseur analogique-numérique, par exemple, vous pouvez collecter les échantillons de sortie dans une mémoire tampon et traiter cette mémoire tampon en une seule opération, telle qu'une transformée de Fourier rapide. Ce traitement des données par paquets réduit le nombre d'invocations des blocs de votre modèle. En général, le surcoût de planification diminue à mesure que la taille de trame augmente. Cependant, les trames plus grandes consomment davantage de mémoire, et les limitations de mémoire peuvent nuire aux performances des modèles complexes. Testez différentes tailles de trame pour trouver celle qui maximise les gains de performance du traitement par trames sans provoquer de problèmes de mémoire.
Réduction de l'interactivité
En général, plus le modèle est interactif, plus la simulation sera longue. Les conseils de cette section illustrent des façons d'améliorer les performances en renonçant à une certaine interactivité.
Désactiver les diagnostics de débuggage. Certaines fonctions de diagnostic activées ralentissent sensiblement les simulations. Vous pouvez les désactiver dans le volet Diagnostics de la boîte de dialogue Configuration Parameters.
Remarque : L'exécution des diagnostics array bounds exceeded et solver data inconsistency peut entraîner un ralentissement notable des performances d'exécution du modèle.
Désactiver les animations de simulation. Par défaut, les diagrammes Stateflow mettent en évidence les états actifs et animent les transitions d'état qui se produisent pendant l'exécution du modèle. Cette fonctionnalité est utile pour le débuggage, mais elle ralentit la simulation. Pour accélérer les simulations, fermez tous les diagrammes Stateflow ou désactivez l'animation. De même, si vous utilisez Simulink 3D Animation™, la visualisation SimMechanics™, FlightGear ou un autre package d'animation 3D, envisagez de désactiver l'animation ou de réduire la fidélité de la scène pour améliorer les performances.
En savoir plus sur l'accélération de la simulation dans Stateflow.
Ajuster les paramètres propres aux visualiseurs et gérer les visualiseurs au moyen de sous-systèmes activés. Si votre modèle contient un visualiseur Scope qui affiche un grand nombre de points de données et que vous ne pouvez pas le supprimer, essayez d'ajuster les paramètres du visualiseur afin de privilégier la vitesse de rendu au détriment de la fidélité. Attention toutefois : en utilisant la décimation pour réduire le nombre de points de données tracés, vous risquez de manquer des transitoires courts et d'autres phénomènes qui seraient évidents avec davantage de points de données. Vous pouvez placer des visualiseurs dans des sous-systèmes activés afin de contrôler plus précisément quelles visualisations sont activées et à quel moment.
En savoir plus sur l'influence des paramètres du visualiseur de signaux Scope sur les performances.
Utilisation de blocs MATLAB Function au lieu de blocs Interpreted MATLAB Function
Pour appeler une fonction MATLAB dans votre modèle Simulink, utilisez un bloc MATLAB Function plutôt qu'un bloc Interpreted MATLAB Function ou une S-function MATLAB. Le bloc MATLAB Function est l'alternative la plus rapide. Il permet de générer du code C embarquable. Bien que le bloc MATLAB Function ne supporte pas toutes les fonctions MATLAB, le sous-ensemble du langage MATLAB qu'il supporte est vaste.
Pour trouver rapidement tous les blocs Interpreted MATLAB Function de votre modèle, utilisez Performance Advisor.
En savoir plus sur l'utilisation du bloc MATLAB Function.
Vous enregistrez de grands jeux de données. Lors de l'enregistrement de grandes quantités de données (par exemple, dans des modèles qui incluent des blocs To Workspace, To File ou Scope), utilisez la décimation ou limitez la sortie enregistrée à la dernière partie de la simulation. Évitez d'enregistrer des données redondantes (par exemple, n'enregistrez le temps qu'une seule fois) et des données superflues (par exemple, enregistrez des valeurs entières plutôt que des valeurs de type double lorsque c'est possible). Le remplacement des paramètres d'enregistrement permet également de contrôler quels signaux sont enregistrés sans recompiler la cible de simulation en mode Accelerator.
En savoir plus sur l'exportation des données de simulation.
Techniques utiles supplémentaires
Les techniques suivantes s'appliquent à certains modèles spécifiques ; si votre modèle correspond aux schémas décrits ci-dessous, vous pourrez probablement les utiliser pour augmenter la vitesse de simulation.
Optimisation de l'accélération hardware
SIMD (Single Instruction Multiple Data) est une technique de traitement parallèle au niveau des données qui effectue la même opération sur plusieurs points de données simultanément. De nombreux CPU modernes disposent d'instructions SIMD qui, par exemple, effectuent plusieurs additions ou multiplications simultanément. Pour les opérations nécessitant une puissance de calcul importante sur les blocs supportés, les intrinsèques SIMD peuvent améliorer les performances de la simulation.
Simulink supporte SIMD pour l'accélération hardware dans tous les modes de simulation qui utilisent des technologies de génération de code (par exemple, le mode Accelerator ou Rapid Accelerator).
Simulink propose un paramètre configset permettant de contrôler le type de SIMD dans le panneau Simulation Target. Pour les options d'accélération hardware, le choix par défaut (« leverage generic hardware ») est disponible sur tous les CPU X86 et ne nécessite aucune recompilation. L'autre option (« leverage native hardware ») dépend du CPU. Si votre CPU supporte des jeux d'instructions SIMD plus récents, tels que SSE2/AVX2/AVX512, ce choix peut offrir une vitesse de simulation encore plus élevée (figure 17).