Plusieurs facteurs déterminent si les performances d'un programme NI LabVIEW sont meilleures sur un système multicœur (des machines double-cœurs ou quadricœurs, par exemple). Les spécifications du nouveau matériel, la structure de l'application LabVIEW et le logiciel du système font partie de ces facteurs. En moyenne, les tests des structures courantes des programmes LabVIEW indiquent une amélioration de 25 à 35 pour cent de la durée d'exécution due au parallélisme naturel commun dans le code LabVIEW. Cependant, la nature d'un programme particulier peut avoir un effet significatif sur cette estimation. Vous pouvez réduire considérablement la durée d'exécution d'un programme LabVIEW lorsque vous passez à un système informatique multicœur si vous optimisez ce programme pour ce type d'environnement. Ce document traite des principaux facteurs ayant un impact sur les performances des programmes LabVIEW sur les systèmes multicœurs.
Lorsque vous évaluez les performances d'un programme LabVIEW, les critères les plus importants à considérer sont l'utilisation de la mémoire et la durée d'exécution. La durée d'exécution est la quantité de temps, mesurée en général en secondes, requise pour traiter un groupe d'instructions. L'utilisation de la mémoire est l'espace mémoire, mesuré en général en octets, requis pour traiter un groupe d'instructions. Ces mesures (la durée d'exécution, surtout) donnent une bonne idée des performances d'un programme particulier. Une autre amélioration des performances observée sur les systèmes multicœurs concerne le temps de réponse. Le temps de réponse (la rapidité à laquelle un programme ou un système répond aux entrées) ne tient pas compte du temps requis pour exécuter une action désirée. Les systèmes multicœurs font preuve d'un meilleur temps de réponse rendu possible par le multitasking avec plusieurs cœurs disponibles. Ceci est une amélioration des performances, mais ce n'est pas nécessairement signe d'une amélioration de la durée d'exécution d'un programme.
LabVIEW adapte automatiquement les programmes pour tirer parti des processeurs multiples sur les systèmes informatiques haut de gamme. Par exemple, LabVIEW crée huit threads pour l'exécution des programmes sur un ordinateur octocœur.
Si vous remplacez un système informatique monocœur par un système multicœur qui utilise des unités de traitement ayant la même vitesse d'horloge que le système monocœur, le programme LabVIEW s'exécute plus rapidement. Dans un cas idéal, la vitesse d'exécution du programme augmenterait d'un facteur égal au nombre de processeurs du système informatique multicœur (par exemple, une vitesse quatre fois supérieure sur un système quadricœur) ; cependant, le temps système dû aux communications entre les threads et les processeurs empêche d'atteindre une telle amélioration de la durée d'exécution. Si le programme LabVIEW en question est complètement séquentiel et qu'il s'exécute sur un seul processeur, il n'a pas besoin de partager autant de temps processeur avec les autres logiciels, ce qui améliore la durée d'exécution. S'il est complètement parallèle et qu'il consiste en tâches de taille identique sans dépendance de données, il est possible de s'approcher des améliorations de durée d'exécution idéales.
Si vous remplacez un système informatique monocœur par un système multicœur qui utilise des processeurs à vitesses d'horloge plus basses, il devient difficile de déterminer les changements de durée d'exécution des programmes LabVIEW. Si le programme LabVIEW en question est complètement séquentiel et qu'il a un accès exclusif à un seul cœur du système multicœur, il est probable que les vitesses d'horloge relatives du système et la planification des tâches déterminent l'effet sur la durée d'exécution. La durée d'exécution d'un programme LabVIEW qui est complètement parallèle, qui consiste en tâches de même taille sans dépendance de données et qui a accès à tous les cœurs disponibles sur le système multicœur dépend aussi des vitesses d'horloge relatives et de la planification des tâches.
L'organisation de la mémoire dans les systèmes informatiques multicœurs affecte le temps système utilisé pour les communications et la vitesse d'exécution des programmes LabVIEW. Les architectures de mémoire courantes sont une mémoire partagée, une mémoire distribuée et une mémoire partagée-distribuée hybride. Les systèmes à mémoire partagée utilisent un grand espace mémoire global, accessible par tous les processeurs, pour obtenir des communications rapides. Cependant, lorsque des processeurs supplémentaires sont connectés à la même mémoire, un goulot d'étranglement apparaît au niveau des communications entre les processeurs et la mémoire. Les systèmes à mémoire distribuée utilisent un espace mémoire local pour chaque processeur et communiquent entre les différents processeurs via un réseau de communication ; par conséquent, les communications entre processeurs sont plus lentes que sur les systèmes à mémoire partagée. Finalement, l'architecture à mémoire partagée-distribuée est utilisée sur certains systèmes pour exploiter les avantages des deux architectures. Les modes de gestion de la mémoire ont un effect significatif sur le temps système dû aux communications et, par conséquent, sur la vitesse d'exécution des programmes, quel que soit leur langage (LabVIEW, C, Visual Basic, etc.).
À cause du temps système utilisé pour les communications, la distance physique et la qualité des connexions qui séparent les processeurs affectent la vitesse d'exécution des programmes LabVIEW. Le temps de latence des communications entre des processeurs qui se trouvent sur des circuits intégrés différents est supérieur à celui des processeurs qui se trouvent sur un même circuit. Il en découle une augmentation du temps système dû aux communications et par conséquence, une augmentation de la durée d'exécution des programmes LabVIEW. Par exemple, dans la figure 1, le système à deux processeurs (deux connecteurs) de gauche a une latence plus élevée que le processeur double-cœur (un seul circuit) de droite.
La durée d'exécution d'un programme LabVIEW sur un ordinateur multicœur dépend autant du programme que de l'ordinateur sur lequel il s'exécute. Le programme doit être écrit de sorte à pouvoir tirer parti de l'environnement caractéristique des systèmes multicœurs. La granularité (le rapport calcul/communication), l'équilibrage de charge et le degré de parallélisme d'un programme affectent considérablement la durée d'exécution de ce programme. Une grande partie du code G existant est écrite pour une exécution séquentielle mais il est probable que, grâce à la nature de la programmation par flux de données, ce type de code possède un certain degré de parallélisme intrinsèque. Comme mentionné plus haut, les tests des structures courantes des programmes LabVIEW indiquent en moyenne une amélioration de 25 à 35 pour cent de la durée d'exécution lors du passage d'un système monocœur à un système multicœur. Cependant, la nature d'un programme particulier a un effet significatif sur cette estimation. En optimisant un programme LabVIEW pour un environnement informatique multicœur, vous pouvez réduire considérablement la durée d'exécution de ce programme lorsque vous passez à un système multicœur.
Il est difficile d'organiser du code G en vue d'augmenter la vitesse d'exécution si vous ne connaissez pas les spécifications du matériel sur lequel le programme s'exécute. Il est crucial d'avoir une connaissance du système sur lequel un programme multicœur s'exécute pour atteindre la vitesse d'exécution maximale. Les techniques de programmation multicœur requièrent une approche plus générique dans le cas de systèmes dotés d'un nombre inconnu de cœurs. Cette approche vous aide à obtenir une réduction de la durée d'exécution sur la plupart des machines multicœurs ; en contrepartie, vous risquez de n'atteindre la vitesse d'exécution maximale sur aucun des systèmes. L'adaptation des programmes LabVIEW à du matériel spécifique peut prendre beaucoup de temps et n'est pas toujours indispensable, mais elle peut s'avérer nécessaire si vous devez atteindre la vitesse d'exécution maximale sur du matériel spécifique. Par exemple, pour utiliser pleinement un système informatique octocœur, vous pouvez employer des techniques de programmation parallèle avancées, comme la parallélisation des données ou le pipelining. De plus, pour atteindre les durées d'exécution les plus courtes des programmes sur les systèmes multicœurs, vous pouvez tirer parti du nombre de cœurs du système, de la disposition des cœurs (deux double-cœurs ou un quadricœur), de l'arrangement des connexions, du mode de gestion de la mémoire et des informations sur les problèmes connus.
Pour obtenir des informations complémentaires sur les stratégies de programmation parallèle, reportez-vous à :
Les goulots d'étranglement du parallélisme peuvent survenir à plusieurs niveaux de la pile de couches logicielles ; ce problème est difficile à éviter dans les langages traditionnels, comme le C. La programmation LabVIEW a l'avantage d'utiliser une pile logicielle "prête au multicœur" qui empêche la création de ces goulots d'étranglement. Pour obtenir les gains de performances possibles avec le matériel multicœur, vous devez déterminer si le multicœur est supporté par les quatre couches de la pile logicielle : l'outil de développement, les bibliothèques, les drivers de périphériques et le système d'exploitation. Si ces couches ne sont pas prêtes au multicœur, non seulement les gains de performances sont peu probables, mais il y a un risque de dégradation des performances. Le tableau 1 montre comment LabVIEW garantit qu'une pile logicielle est prête au multicœur.
Les systèmes multicœurs comportant des bibliothèques et des drivers qui ne sont pas prêts au multicœur ou des systèmes d'exploitation incapables d'équilibrer la charge des tâches entre plusieurs cœurs n'exécutent pas les programmes LabVIEW plus rapidement.
Vous devez tenir compte d'un certain nombre de facteurs pour estimer la durée d'exécution attendue de vos programmes LabVIEW sur des systèmes multicœurs. Des problèmes matériels et logiciels externes à LabVIEW risquent d'empêcher les améliorations de la vitesse d'exécution si vous passez à un système multicœur qui n'est pas configuré correctement. De plus, la structure d'un programme LabVIEW est souvent le facteur principal en matière de performances multicœurs. Grâce à son support du multicœur et à ses capacités de traitement multicœur simples et intuitives et ses exemples, LabVIEW vous aide à minimiser les facteurs qu'il faut prendre en considération lorsque vous passez à des systèmes informatiques multicœurs.
Suite de whitepapers sur les principes fondamentaux de la programmation multicœur
Linux® est la marque déposée de Linus Torvalds aux États-Unis et dans d'autres pays.