Multitraitement et hyper-Threading dans LabVIEW
- Mise à jour2025-08-27
- Temps de lecture : 4 minute(s)
Un ordinateur à Hyper-Threading n'a qu'un processeur, mais se comporte comme un multiprocesseur. (Windows) L'hyper-threading est une fonctionnalité de certaines versions du processeur Intel Pentium 4 et versions ultérieures. Lorsque vous lancez le gestionnaire des tâches de Windows sur un ordinateur à Hyper-Threading et que vous cliquez sur l'onglet Performances, l'historique de l'utilisation est affiché pour deux processeurs. (macOS) Lancez Activity Monitor pour vérifier les performances.
Un processeur à Hyper-Threading agit comme plusieurs processeurs embarqués sur la même puce. Certaines ressources de la puce sont dupliquées, comme l'ensemble de registres, par exemple. D'autres ressources sont partagées, comme les unités d'exécution et la mémoire cache. Certaines ressources, comme les buffers qui stockent les micro-opérations, sont partitionnées et chaque processeur logique en reçoit une partie.
L'optimisation d'une application pour tirer parti de l'Hyper-Threading est semblable à l'optimisation d'une application pour un système à plusieurs processeurs (ou multicœur), à plusieurs UC ou un système SMP, à quelques exceptions près. Par exemple, un ordinateur à Hyper-Threading partage les unités d'exécution alors qu'un ordinateur à deux processeurs comporte deux ensembles distincts d'unités d'exécution. Par conséquent, toute application qui est limitée par des unités d'exécution à virgule flottante est plus performante sur les multiprocesseurs car les unités d'exécution ne doivent pas être partagées. Le même principe est valable pour les conflits de cache. Si deux threads essaient d'accéder au cache, les performances sont meilleures sur un multiprocesseur car chaque processeur à son propre cache de taille intégrale.
Vue d'ensemble de l'exécution de LabVIEW
Le système d'exécution de LabVIEW est construit pour le multi-traitement. Dans les langages de programmation textuels, si vous voulez qu'une application soit multithread, vous devez créer plusieurs threads et écrire du code pour pouvoir communiquer entre ces différents threads. En revanche, LabVIEW reconnaît les situations où la mise en œuvre de plusieurs threads s'avère opportune dans les VIs, et le système d'exécution se charge alors des communications entre ces différents threads à votre place.
L'exemple suivant tire parti du système d'exécution en mode multithread de LabVIEW.
Dans ce VI, LabVIEW reconnaît qu'il peut exécuter les deux boucles indépendamment, et simultanément dans la plupart des cas, s'il s'agit d'un environnement à plusieurs processeurs ou à Hyper-Threading.
Exemple de parallélisme pour les nombres premiers
L'exemple suivant calcule les nombres premiers supérieurs à deux.
Le diagramme évalue tous les nombres impairs entre trois et Termes num. et détermine si ce sont des nombres premiers. La boucle For interne renvoie VRAI si le terme peut être divisé par un autre nombre avec un reste de zéro.
Les itérations de la boucle For externe ne dépendent pas les unes des autres. Si les itérations d'une boucle For peuvent s'exécuter dans n'importe quel ordre, vous pouvez activer le parallélisme des itérations de boucle sur cette boucle pour améliorer les performances. Dans cet exemple, la boucle For externe est une bonne candidate pour le parallélisme des itérations car elle effectue une quantité de calcul considérable par itération.
Pour activer le parallélisme sur ce VI, cliquez avec le bouton droit sur la boucle For et sélectionnez Configurer le parallélisme des itérations dans le menu local. Cette action affiche la boîte de dialogue Parallélisme des itérations de boucle For.
Sur un ordinateur multicœur, les itérations de boucle en parallèle permettent à LabVIEW de tirer parti des différents processeurs pour exécuter la boucle For plus rapidement. La version parallèle de cet exemple est plus efficace car LabVIEW peut exécuter des codes différents simultanément.
Remarquez que ces deux exemples de VIs ne comprennent pas de code pour la gestion explicite des threads. Le paradigme de programmation par flux de données de LabVIEW permet au système d'exécution de LabVIEW d'exécuter les instances de boucle en parallèle dans des threads distincts.
Programmation pour les systèmes à Hyper-Threading ou à plusieurs processeurs
L'optimisation des performances d'une application est presque la même sur un ordinateur à Hyper-Threading que sur un multiprocesseur. Il y a toutefois quelques différences car l'ordinateur à Hyper-Threading partage certaines ressources entre les deux processeurs logiques, comme le cache et les unités d'exécution, par exemple. Si vous pensez qu'une application qui s'exécute sur un ordinateur à Hyper-Threading est limitée par une ressource partagée, testez l'application avec un analyseur de performances d'échantillons optimisé, comme l'lntel VTune.