Introduction au multitraitement symétrique de LabVIEW Real-Time
Introduction
Série de tutoriaux sur les principes fondamentaux de la programmation multicœur
Série de tutoriaux sur les principes fondamentaux de la programmation multicœur
Table des matières
- LabVIEWIntroduction
- Affectation de tâches à des processeurs spécifiques avec la boucle cadencée
- Mise au point d'applications temps réel multicœurs
- Prêt à l'emploi sur les processeurs multicœurs
- Étude de cas LabVIEW Real-Time SMP : Wineman Technologies
- Conclusion
- Ressources supplémentaires sur la programmation multicœur
LabVIEWIntroduction
Le module LabVIEW 8.5 Real-Time intègre NI RT Extensions for SMP, qui ajoute le support multicœur au système d'exploitation temps réel ETS. Vous pouvez installer NI RT Extensions for SMP afin de profiter de la technologie des processeurs multicœurs haute-performance. La figure 1 ci-dessous illustre le procédé d'équilibrage automatique de charge qui permet au module Real-Time de distribuer les threads de l'application entre les cœurs de processeurs disponibles sur une cible RT ETS.

Figure 1 - Support de LabVIEW Real-Time pour SMP
Affectation de tâches à des processeurs spécifiques avec la boucle cadencée
Pour accroître encore davantage les performances et la fiabilité d'un système temps réel, vous pouvez facilement affecter des boucles cadencées à des cœurs de processeurs spécifiques. Vous pouvez dédier un cœur de processeur à l'exécution d'une boucle de contrôle à temps critique et l'isoler des tâches moins importantes qui s'exécutent sur différents cœurs, comme l'illustre la figure 2 ci-dessous.

Figure 2 - Affectation d'une tâche à temps critique à un processeur spécifique.
Avec le module LabVIEW 8.5 Real-Time, vous pouvez assigner une boucle cadencée à un cœur de processeur spécifique. Chaque boucle cadencée représente un thread unique et vous pouvez utiliser la section Affectation du processeur de la boîte de dialogue Configurer la boucle cadencée pour spécifier que le thread s'exécute uniquement sur un cœur de processeur spécifique, comme le montre la figure 3 ci-dessous.

Figure 3 - Affectation d'une boucle cadencée à un cœur de processeur spécifique.
Mise au point d'applications temps réel multicœurs
La complexité grandissante des applications fait qu'il est important de comprendre, à bas niveau, comment s'exécute du code sur un système temps réel. L'ajout de cœurs de processeurs au système accroît la complexité d'autant plus. La version 2.0 du toolkit NI Real-Time Execution Trace offre une représentation visuelle de l'exécution de VIs et de threads sur des systèmes mono et multicœurs. Ceci vous permet d'identifier rapidement les sections de code source sur lesquelles vous pouvez agir efficacement et détecter des comportements indésirables comme la contention de ressources, des allocations mémoire ou des inversions de priorités.

Figure 4 - Le toolkit Real-Time Execution Trace 2.0 intègre le support de la mise au point multicœur
Vous pouvez aussi utiliser On-Screen CPU Monitor sur des cibles 8.5 RT pour surveiller l'utilisation du processeur sur des systèmes temps réel multicœurs. Cet utilitaire présente des informations directement sur un affichage connecté à la cible temps réel. La charge totale, le pourcentage d'interruption (ISR, Interrupt Service Request), l'utilisation du processeur par les structures cadencées et les threads figurent parmi les informations fournies, comme montré ci-dessous.
Figure 5 - On-Screen CPU Monitor
Prêt à l'emploi sur les processeurs multicœurs
Les sociétés qui migrent des logiciels temps réel vers un processeur multicœur voient différents niveaux d'évolutivité et doivent examiner l'évolutivité à chaque niveau du système. Ce processus peut prendre un temps considérable et consommer énormément de ressources. Un des avantages principaux du module LabVIEW 8.5 Real-Time est sa pile de couches logicielles parfaitement adaptées aux exigences des processeurs multicœurs.
La pile de couches logicielles temps réel comprend des outils de développement, des bibliothèques, des drivers de périphériques et un système d'exploitation temps réel. De nombreuses applications temps réel créées avec des systèmes de génération précédentes ont été construites sur une pile de couches logicielles prévues pour les dispositifs monoprocesseurs. Le tableau 1 liste quelques éléments clés à prendre en compte pour évaluer si la pile de couches logicielles temps réel d'une application de contrôle classique est prête à l'emploi sur des processeurs multicœurs.
|
Pile de couches logicielles temps réel |
Prête à l'emploi sur un processeur multicœur signifie que : |
|
Outil de développement |
Le support est fourni sur les OS temps réel et l'outil permet d'optimiser le threading des applications développées. Les capacités de mise au point et de traçage de code permettent d'analyser ce qui se passe sur des systèmes multicœurs temps réel. |
|
Bibliothèques |
Les bibliothèques sont thread-safe et peuvent être réentrantes pour une exécution en parallèle. Les algorithmes sont en place (ils effectuent des manipulations de mémoire locales) pour ne pas causer d'allocation mémoire et ne pas générer de jitter dans le système. |
|
Drivers matériels |
Les drivers sont multithreads et optimisés. |
|
Système d'exploitation temps réel |
L'OS temps réel supporte le multithread, le multitâche et peut équilibrer la charge sur des processeurs multicœurs avec SMP. |
Tableau 1 - Pile de couches logicielles temps réel prête à l'emploi sur les processeurs multicœurs
Les drivers de périphériques qui ne sont pas thread-safe ou les bibliothèques qui ne peuvent pas être exécutées de manière réentrante sont des problèmes courants dans les systèmes temps réel. Il se peut que du code non réentrant s'exécute correctement mais il ne peut pas s'exécuter en parallèle sur un processeur multicœur et peut devenir une ressource partagée, ce qui peut engendrer des problèmes de performance. LabVIEW évite ces problèmes grâce à des drivers d'E/S réentrants et thread-safe, comme DAQmx, et à des bibliothèques mathématiques réentrantes.
Remarque La configuration par défaut de l'exécution de certains VIs et fonctions de la palette Mathématiques et traitement du signal est non réentrante. Vous pouvez configurer des VIs pour que leur exécution soit réentrante en utilisant la page Exécution de la boîte de dialogue Propriétés du VI dans LabVIEW.
Étude de cas LabVIEW Real-Time SMP : Wineman Technologies
Wineman est un partenaire de National Instruments qui développe des systèmes de contrôle de dynamomètres ainsi que des simulateurs HIL (Hardware-in-the-Loop) en utilisant le contrôle PID, la génération de profils, les alarmes, les scripts, les E/S analogiques et numériques, CAN et la communication TCP/IP et Modbus. La famille de produits Wineman comprend les applications EASE et INERTIA qui utilisent une architecture basée sur LabVIEW Real-Time.
Le défi que devait relever la société Wineman consistait à réduire l'utilisation du processeur. La boucle haute-priorité d'une de leurs applications types utilisait la majorité du processeur monocœur afin de répondre aux exigences en matière d'exécution. Ceci laissait peu de temps pour l'exécution des boucles à basse priorité comme la communication de l'interface utilisateur et l'enregistrement des données. La conséquence de ce manque de ressource était que l'application était difficile à utiliser et/ou était instable.
En utilisant le support SMP dans le module LabVIEW 8.5 Real-Time, la société Wineman put ajouter davantage de boucles de contrôle au système existant, améliorant ainsi les performances de 40% en effectuant seulement des changements mineurs au code LabVIEW.
« Avec LabVIEW Real-Time 8.5, nous avons augmenté notre vitesse de boucle maximum de 40% en utilisant les deux cœurs de processeurs de notre contrôleur temps réel PXI double cœur… »
Le support des processeurs multicœurs dans LabVIEW Real-Time a amélioré de manière significative les performances des produits de la société Wineman. Le plus remarquable fut la capacité de tirer parti du support du processeur multicœur sans apporter de changements importants au code LabVIEW. En utilisant la nature parallèle inhérente de LabVIEW, l'application de la société Wineman a naturellement migré vers l'environnement multicœur en exploitant la puissance de traitement supplémentaire. Le support SMP transparent a permis à la société Wineman d'ajouter des fonctionnalités au contrôle de dynamomètres et aux simulateurs HIL et de mieux répondre aux besoins de leurs utilisateurs finaux.
Conclusion
LabVIEW 8.5 Real-Time permet aux développeurs de tirer parti des hautes performances des processeurs multicœurs dans leurs applications temps réel. En plus du support SMP, LabVIEW 8.5 intègre des outils de mise au point avancés comme le toolkit Execution Trace 2.0, qui vous permet d'effectuer une analyse visuelle de l'exécution des VIs et des threads sur un système multicœur.
La pile de couches logicielles de LabVIEW 8.5 Real-Time pouvant être utilisée avec des processeurs multicœurs a permis à la société Wineman d'obtenir des gains de performances immédiats lors de la migration vers des systèmes multicœurs sans modification importante du code LabVIEW d'origine.
Ressources supplémentaires sur la programmation multicœur
Série de tutoriaux sur les principes fondamentaux de la programmation multicœur
- www.ni.com/multicore/f
- Mise au point d'applications multicœurs avec le toolkit Real-Time Execution Trace
- En savoir plus sur NI LabVIEW
Législation
Ce tutorial a été développé par National Instruments. Bien qu'un support technique puisse être fourni pour ce tutorial, il n'a pas été complètement testé ni vérifié, et NI ne garantit pas sa qualité, ni qu'il continuera à être supporté pour les nouvelles versions des produits et drivers qui y sont rattachés. CE TUTORIAL EST FOURNI "EN L'ÉTAT" SANS GARANTIE D'AUCUNE SORTE, ET EST SUJET À CERTAINES RESTRICTIONS COMME PLUS SPÉCIFIQUEMENT DÉTERMINÉES DANS LES CONDITIONS D'UTILISATION DE NI.COM (http://ni.com/legal/termsofuse/unitedstates/us/).

