Upload
duongdiep
View
215
Download
0
Embed Size (px)
Citation preview
france.ni.com
Antoine PALLADINI
Responsable de Projets
ARCALE
Comment améliorer les performances
de vos applications LabVIEW
ARCALE propose des prestations dans les
domaines du test et mesure et de l’embarqué
Concevoir Développer Maintenir
0
500
1000
1500
2000
2500
3000
2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012
Évolution du CA
CA (K€)
PARIS
TOULOUSE
GRENOBLE
Historique et évolutions
Fondée en 2002 par trois ingénieurs de National Instruments
Trois agences – Trois équipes
Formation spécifique
Formation à la maintenance des applications développées
ARCALE Toulouse est centre de formation NI
Formation
Améliorer les performances en LabVIEW
Le but de l’optimisation
Les outils Optimisation
mémoire
Optimisation de
l’exécution
Le cycle d’optimisation
Optimiser
• Améliorer l’efficacité • Améliorer la vitesse
Benchmark • Évaluer les performances • Identifier les zones à problème
Pourquoi doit-on profiler son code
• L’amélioration des performances est plus efficace
dans les 20 %
• Difficulté : trouver de quels 20% il s’agit !
• 80 % du temps d’exécution a lieu dans 20 % du code
La règle du 80/20 des performances logicielles
Améliorer les performances en LabVIEW
Le but de l’optimisation
Les outils Optimisation
mémoire
Optimisation de
l’exécution
Gestionnaire de tâches Windows
• Permet à l'utilisateur de savoir si
c'est la mémoire ou l'utilisation
de la CPU qui pose problème
• Peut servir à identifier des fuites
mémoire
• Afficher » Sélectionner les
colonnes… vous permet
d'ajouter des statistiques
supplémentaires
Performance monitor
• Vous permet de contrôler
• les processeurs
• les E/S sur disque
• les accès réseau
• la mémoire/paging
• Accéder en tapant
“perfmon”
dans la boîte de dialogue
Exécuter de Windows
Benchmarking d’exécution de code
Calibrage
Code
Analyse
“Benchmark Project” exemple fourni avec LabVIEW Real-Time
Afficher les allocations de buffer • Mise en évidence des allocations mémoire
•Outils»Profil»Afficher les allocations de buffer
VI Profiler • Statistiques d’utilisation de la mémoire et temps d’exécution des VIs
•Outils»Profil»Performances et mémoire...
Toolkit LabVIEW Desktop Execution Trace
Threads, CPU
et mémoire
VIs
Plusieurs
sessions
• Traces d’exécutions
détaillées
• Informations sur les
threads et VIs
• Mesure du temps
d’exécution
Toolkit Real-Time Execution Trace
Usage CPU
Multiple
sessions
Threads
VIs
• Traces d’exécutions
détaillées
• Informations sur les
threads et VIs
• Mesure du temps
d’exécution
Résumé sur le benchmarking
Au niveau du système d’exploitation
• Task Manager, Perfmon
Au niveau LabVIEW
• Allocation mémoire, VI Profiler, VIs de benchmark
Au niveau des VIs
• Toolkit LabVIEW Desktop Execution Trace
Améliorer les performances en LabVIEW
Le but de l’optimisation
Les outils Optimisation
mémoire
Optimisation de
l’exécution
Performances mémoire
• Les fonctionnalités suivantes affectent l’impact de
l’allocation mémoire sur votre application :
sémantique des fils, structure « Élément en place »
adapter les types de données
coercition de type
allocation des tableaux
Utilisation de la structure Élément en place
Vous permet de modifier de façon explicite les données en place
Types de nœud en bordure
• Indexer/remplacer un élément d’un tableau
• Diviser/remplacer des sous-tableaux
• Désassembler/assembler des éléments
• Désassembler/assembler les éléments
d’une Waveform
• Variant vers/à partir d’un élément
• Entrée/sortie en place sur un élément
• Lire/écrire une référence de valeur de
donnée
Adapter les types de données
Afin d’optimiser les allocations mémoire, utiliser les
types de données les mieux adaptés : • organiser vos données en tableau ou Cluster
• utiliser des singles plutôt que des doubles si possible
Coercition de type
• Changer le type des données pour obtenir le type de
données souhaité
Les points indiquent automatiquement une coercition
Nécessite une copie Point de coercition
Construire des tableaux
Il existe plusieurs façons d'allouer des tableaux…
Certaines sont plus efficaces que d’autres !
• Réalloue la mémoire à
chaque itération de boucle
Construire des tableaux Il existe plusieurs façons d'allouer des tableaux…
Certaines sont plus efficaces que d’autres !
• Pré-allocation de la mémoire
• Pas de réallocation en cours
d’exécution
Construire des tableaux Il existe plusieurs façons d'allouer des tableaux…
Certaines sont plus efficaces que d’autres !
• La mémoire est pré-allouée
• Simplicité et efficacité garanties!
L’ordre de construction des tableaux
• Ajouter à la fin d’un tableau est bien plus efficace que
d’ajouter au début
• Si vous devez ajouter des éléments au début d’un tableau,
ajoutez-les à la fin, et utilisez une seule fois la fonction
« inverser un tableau » lorsque c’est terminé
Améliorer les performances en LabVIEW
Le but de l’optimisation
Les outils Optimisation
mémoire
Optimisation de
l’exécution
Optimisation de l’exécution
Les axes d’amélioration :
le Multicore ; Le Multithread
LabVIEW Multithread
les communications entre threads (Piles Vs Événements)
gestion des IHM
Communications entre boucle
Les piles Les événements Notifier
Rapidité
Information sur l’état de la pile
FIFO ou LIFO
Flush
Nécessite une structure événement
Mettre à jour une IHM
Perte possible de données
Pile à un seul élément
Communication entre boucle – Les files d’attente
Exemple d’une architecture associant la performance du multithread,
des piles, du pipelining…
Éviter le code inutile dans les boucles
• Ne placez que le code qui doit être répété dans les boucles
L’ouverture/fermeture des références doit se faire à l’extérieur des boucles
Utiliser des primitives
Les primitives sont plus efficaces que les opérations
en chaîne
Est moins
efficace
que :
Mise à jour de l’IHM
• Parmi les points les moins considérés
Pas si évident
De la même manière que pour la gestion mémoire,
LabVIEW essaie d’optimiser l’affichage de l’IHM, mais il
ne peut pas réaliser de miracles
Le thread de l’IHM • Les mises à jour de la face-avant ont lieu dans le thread de l’IHM
• L’exécution a lieu dans d’autres threads
• Les données partagées doivent être protégées
LabVIEW crée une copie supplémentaire appelée « buffer de transfert »
Exec
Thread
UI Loop
Thread
Exec
Thread
Certaines opérations nécessitent le thread de l’IHM
Le nœud d’appel de bibliothèques
Le nœud de propriété des commandes/indicateurs
Les références aux commandes
de la face-avant
Les effets des nœuds de propriété de l’IHM sur
les performances
• Les nœuds de propriété des commandes/indicateurs sont lents
Nécessitent des changements des threads
Ne peuvent pas être parallèles
Nombre d’entre eux déclenchent des modifications d’IHM
• Les nœuds de propriété dans une boucle rapide sont mauvais
• La propriété « valeur » a les propriétés d’un nœud de propriété pas
d’un terminal
Gestion d’IHM
• Les données sont copiées…
… des buffers d’exécution aux buffers de transfert
… des buffers de transfert aux buffers d’indicateurs
• Une mise à jour toutes les 100 ms est suffisante
Ne mettez à jour les indicateurs que lorsque vous en avez besoin
Différer la mise à jour de l’affichage
Utiliser le nœud de propriété « DeferPanelUpdates » afin de
différer la mise à jour des interfaces utilisateur
VIs réentrants • La réentrance permet à un sous-VI d'être appelé de façon
simultanée depuis plusieurs emplacements
Nécessite de la mémoire supplémentaire pour chaque instance
• Utiliser des VIs réentrants dans deux cas différents
Pour permettre à un sous-VI d'être appelé en parallèle
Pour permettre à une instance de sous-VI de maintenir son
propre état
Appels de sous-VIs
• Les appels de sous-VIs ne coûtent rien
On peut noter un certain temps système
La priorité des sous-routines est particulièrement utile pour les
petits VIs qui sont souvent appelés
• Appeler un sous-VI dans un système d'exécution
différent peut coûter très cher
• Toutefois, l'appel d'un sous-VI ne provoque pas
nécessairement de nouvelles copies de mémoire
Améliorer les performances en LabVIEW
Le but de l’optimisation
Les outils Optimisation
mémoire Optimisation de l’exécution
• Réduit l’utilisation mémoire, augmente la vitesse
• Règle du 80/20
Le but de l’optimisation
Les outils Optimisation
mémoire Optimisation de l’exécution
• Les outils Windows (gestionnaire de tâche, perfmon)
• VI Profiler
• Toolkit Real-Time Execution Trace
Améliorer les performances en LabVIEW
Le but de l’optimisation
Les outils Optimisation
mémoire Optimisation de l’exécution
• Ôtez les points de coercition
• Profitez des structures “en place”
Améliorer les performances en LabVIEW
Le but de l’optimisation
Les outils Optimisation
mémoire Optimisation de l’exécution
• Sachez où LabVIEW peut vous aider
• Limitez les mises à jour des indicateurs
• Utilisez des paramètres d’exécution appropriés
Améliorer les performances en LabVIEW
Aller plus loin
• ni.com/multicore
• ni.com/devzone
• ni.com/training
• L’aide LabVIEW
• Formation LabVIEW Performance
Formations Débutant Expérimenté Avancé
Certifications
LabVIEW
Core 1
LabVIEW
Core 2
LabVIEW
Core 3
Certified LabVIEW Developer
Exam
Advanced
Architectures
for LabVIEW
Certified LabVIEW Architect
Exam
Cours
Certified LabVIEW Associate
Developer Exam
LabVIEW
Connectivity
Managing
Software
Engineering
in LabVIEW
Cours sur le
matériel NI
• Économiser du temps et de l’argent avec les formations NI
• Lors d’un sondage mondial, les utilisateurs NI ont rapporté :
0% 50% 100%
Apprentissage 66 % plus rapide
Développement d’applications 50 % plus rapide
43 % de temps en moins pour la maintenance
*Source: NI WW training customer survey, 2009, n = 640, from US, Canada, Germany, Spain, Poland, Mexico, Brazil, South America, Japan, Taiwan, ASEAN