Stratégies de programmation pour le traitement multicœur : parallélisation des tâches
Introduction
Jusqu’à récemment, les progrès du matériel informatique ont offert des améliorations significatives de la vitesse d’exécution des logiciels, qui n’ont nécessité que peu d’efforts de la part des développeurs de logiciels. Les augmentations de vitesse du processeur ont apporté un décollage instantané de la vitesse des logiciels. Cependant, alors que les vitesses de processeur ont atteint un pic et que les fabricants de processeurs ont utilisé de nouvelles techniques pour augmenter la puissance de traitement, cette situation commence à changer. L’introduction des processeurs multicœurs offre un nouveau défi aux développeurs de logiciels, qui doivent désormais maîtriser les techniques de programmation nécessaires pour bénéficier du potentiel du traitement multicœur. L’une de ces techniques de programmation est la parallélisation des tâches.
Table des matières
Parallélisation des tâches
La parallélisation des tâches est simplement l’exécution concurrente de tâches indépendantes dans le logiciel. Considérez un processeur simple-cœur qui exécute un navigateur Web et un programme de traitement de texte simultanément. Bien que ces applications soient des process séparés, elles partagent toujours en fin de compte le même processeur. Pensez maintenant à un scénario dans lequel les deux mêmes programmes s’exécutent sur un processeur double-cœur. Sur la machine double-cœur, ces deux applications peuvent, pour l’essentiel, s’exécuter indépendamment l’une de l’autre. Bien qu’elles puissent partager quelques ressources qui les empêchent de s’exécuter complètement indépendamment, la machine double-cœur permet d'effectuer les deux tâches parallèles plus efficacement.
Le parallélisme naturel de la programmation par flux de données fait de l’environnement de développement graphique LabVIEW de National Instruments le langage de programmation idéal pour l’utilisation de techniques de programmation parallèle. Les langages textuels traditionnels possèdent une syntaxe séquentielle et sont donc difficiles à visualiser et à organiser sous forme parallèle. Au contraire, la création d’une application multithread est intuitive et simple avec NI LabVIEW.
Parallélisation des tâches en LabVIEW
Le paradigme de la programmation graphique LabVIEW facilite la programmation parallèle, même pour les utilisateurs novices. Deux tâches séparées qui ne sont pas dépendantes l’une de l’autre par rapport aux données (ou d’autres ressources) s’exécutent en parallèle sans nécessiter de programmation supplémentaire.
La partie supérieure du code suivant consiste en une tâche d’acquisition analogique de tension et la partie inférieure représente une tâche de génération numérique.
Figure n°1. En LabVIEW, deux sections de code sans dépendance de données s’exécuteront indépendamment, en parallèle.
Ces deux tâches indépendantes d’acquisition de données doivent partager la même U.C. sur un processeur simple-cœur. Sur un processeur multicœur, chaque thread peut s’exécuter sur son propre processeur, ce qui améliore fortement la vitesse d’exécution.
En utilisant le parallélisme de données dans une application, il est important de faire en sorte que deux tâches n’aient aucune ressource partagée susceptible de créer un goulot d'étranglement, comme dans le code présenté dans la Figure n°2.
Dans ce programme, les deux tâches partagent des données ; la tâche numérique est obligée d’attendre que la tâche analogique ait réellement démarré. Bien que ce code semble être parallèle, il ne l’est pas vraiment parce que les deux tâches partagent des données. Il est important d’être conscient de cet écueil lors de la programmation d'applications qui utilisent la parallélisation des tâches.
Une application du parallélisme des tâches
Grâce à la parallélisation des tâches ainsi qu’à d’autres techniques de programmation, les développeurs peuvent tirer complètement profit de la puissance offerte par le traitement multicœur. Les programmeurs qui comprennent et prêtent attention à ces techniques sont capables de concevoir aujourd’hui des applications adaptées aux tendances du traitement du futur. La nature intrinsèquement parallèle de l’environnement de programmation graphique LabVIEW donne aux développeurs les capacités de générer avec efficacité les applications de demain.
Pour plus d’informations sur la programmation multicœur, visitez :
Série sur les principes fondamentaux du multicœur
Les principes fondamentaux de la programmation multicoeur
Ressources de programmation multicœur
Stratégies de programmation pour le traitement multicœur : parallélisme de données
Stratégies de programmation pour le traitement multicœur : pipelining
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/).
