61
france.ni.com Antoine PALLADINI Responsable de Projets ARCALE Comment améliorer les performances de vos applications LabVIEW

Comment améliorer les performances de vos applications LabVIEWdownload.ni.com/.../1-4...vos-applications-LabVIEW.pdf · LabVIEW crée une copie supplémentaire appelée « buffer

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

Industrie Transport / Energie

Aéronautique R&D

Défense Autre

Secteurs d’activités - Références

Savoir-faire

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

“Timing Template (data dep)” exemple fourni avec LabVIEW

Benchmarking d’exécution de code

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

Sémantique des fils

• Chaque fil est un buffer

• Les branches créent des copies

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

Exemple d'optimisation

Fonctionne sur chaque élément d'un tableau de formes

d'ondes

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é

Démo – Les effets de l’optimisation

mémoire

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

Le multicœur

Système

Monocœur

Système

Multicœur

LabVIEW multithread

Application LabVIEW

Multithread

Concrètement

Profiter du multicœur en LabVIEW

Boucle For parallèle

Nouveauté LabVIEW 2009

Pipelining

La boucle cadencée

Profiter du multicœur en LabVIEW

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

Propriétés d'exécution

Fichier » Propriétés du VI » Exécution <CTRL-I>

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

Démo – Les effets de l’optimisation

d’exécution

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

france.ni.com

Des questions ?

facebook.com/nifrance

twitter.com/nifrance

youtube.com/nifrance

ni.com/rss/f

Restez connecté(e) avant et après NIDays

ni.com/community