Stratégies de Programmation Pour Le Traitement Multicœur Pipelining

Vous aimerez peut-être aussi

Vous êtes sur la page 1sur 5

Stratgies de programmation pour le traitement multicur : pipelining

Introduction
Dans un monde rempli de processeurs multicoeurs et des applications multithread, les programmeurs doivent constamment penser la meilleure faon dutiliser la puissance disponible des UC de pointe lors du dveloppement de leurs applications. Bien que la structuration du code parallle par des langages textuels traditionnels puisse tre difficile programmer et visualiser, les environnements de dveloppement graphique tels que LabVIEW de National Instruments permettent aux ingnieurs et scientifiques de diviser leurs temps de dveloppement et dimplmenter rapidement leurs ides. Parce que LabVIEW est parallle par nature (bas sur les flux de donnes), la programmation dapplications multithread est typiquement une tche trs simple. Des tches indpendantes sur le diagramme sexcutent automatiquement en parallle, sans ncessiter de travail supplmentaire pour le programmeur. Mais quen est-il des parties de code qui ne sont pas indpendantes ? Lors de limplmentation dapplications srie par nature, que peut-il tre fait pour exploiter la puissance des UC multicurs ?

Table des matires


1. 2. 3. 4. 5. Introduction au pipelining Comment le pipelining amliore-t-il les performances Pipelining de base en LabVIEW Proccupations importantes Conclusion

Introduction au pipelining
Le pipelining est une technique largement adopte pour lamlioration des performances des tches logicielles srie. Simplement dit, le pipelining est le processus de division dune tche srie en tapes concrtes, qui peuvent tre excutes la manire dune chane de montage. Considrez lexemple suivant : supposez que vous fabriquiez des voitures sur une chane de montage automatise. Votre tche finale est de construire une voiture complte, mais il est possible de sparer cette tche en trois tapes pratiques : construire le chssis, ajouter les lments lintrieur (comme le moteur) et peindre la voiture lorsquelle est termine. Supposez que la construction du chssis, lajout des lments et la peinture prennent une heure chacun. Ainsi, si vous ne construisez quune seule voiture la fois, il faudra trois heures pour la terminer (voir la Figure n1 ci-dessous).

Figure n1. Dans cet exemple (sans pipelining), la construction dune voiture complte prend 3 heures. Comment amliorer ce procd ? Que se passe-t-il si lon construit une station pour la construction du chssis, une autre pour l'installation des lments et une troisime pour la peinture ? Dsormais, pendant quune voiture est peinte, on peut installer les lments dune deuxime et une troisime peut tre en cours de construction du chssis.

Comment le pipelining amliore-t-il les performances


Bien que par cette nouvelle organisation, trois heures soient toujours ncessaires pour terminer une voiture, il est maintenant possible de produire une voiture par heure, plutt qu'une toutes les trois heures : un rendement de production des voitures multipli par trois. Remarquez que cet exemple a t simplifi dans un but de dmonstration ; voir le paragraphe Proccupations importantes ci-dessous pour obtenir des dtails supplmentaires sur le pipelining.

Figure n2. Le pipelining permet damliorer fortement le dbit de lapplication.

Pipelining de base en LabVIEW


Le mme concept de pipelining que celui illustr par lexemple de la voiture peut tre appliqu nimporte quelle application LabVIEW dans laquelle une tche srie est excute. Essentiellement, il est possible dutiliser les registres dcalage et les nuds de rtro-action LabVIEW pour raliser une "ligne dassemblage", partir de nimporte quel programme

donn. Lillustration suivante montre comment une application dacquisition de donnes peut tre srialise afin dutiliser le pipelining et sexcuter sur les diffrents curs de l'UC :

Figure n3. Diagramme dexcution en fonction du temps dune application srialise sur plusieurs curs.

Proccupations importantes
Lors de la cration dapplications multicurs qui mettent en uvre le pipelining, le dveloppeur doit prendre en compte plusieurs points importants. En particulier, l'quilibre des tapes du pipeline ainsi que la minimisation des transferts mmoire entre les curs sont critiques pour lobtention de gains de performances avec le pipelining.

quilibre des tapes


Dans les exemples de fabrication de voiture et les exemples LabVIEW prcdents, on a suppos que lexcution de chaque tape du pipeline prenait une quantit gale de temps ; ces tapes de pipeline taient quilibres. Cependant, dans les applications relles, cette situation se produit rarement. Considrez le diagramme ci-dessous ; si ltape 1 prend trois fois plus de temps pour sexcuter que l'tape 2, le pipelining des deux tapes ne produit quune augmentation minimum des performances. Sans pipeline (temps total = 4 s) :

Avec pipeline (temps total = 3 s) :

Remarque : amlioration des performances = 1,33 X (ce nest pas un cas idal pour le pipelining) Pour remdier cette situation, le programmeur doit transfrer des tches de ltape 1 ltape 2, jusqu ce que les tches mettent environ le mme temps pour sexcuter. Avec un grand nombre dtapes de pipeline, cela peut savrer difficile. En LabVIEW, il est utile dvaluer les performances de chacune des tapes du pipeline, pour en assurer lquilibre. Ceci peut tre le plus facilement ralis grce une structure squence droule, en conjonction avec la fonction Tick Count (ms), comme indiqu la Figure n4.

Figure n4. Mesurez les temps dexcution des tapes du pipeline pour en assurer lquilibre.

Transfert de donnes entre les curs


Lorsque cela est possible, il convient dviter le transfert dimportantes quantits de donnes entre les tapes du pipeline. Puisque les tapes dun pipeline donn pourraient tre excutes sur des curs spars, tout transfert de donnes entre les tapes individuelles pourrait rellement provoquer un transfert de mmoire entre les curs physiques du processeur. Dans le cas o deux curs ne partagent pas de cache (ou que la taille du transfert dpasse la taille du cache), lutilisateur final de lapplication peut observer une diminution de lefficacit du pipelining.

Conclusion
Pour rsumer, le pipelining est une technique que les dveloppeurs peuvent utiliser pour obtenir une augmentation des performances des applications qui sont squentielles par nature (sur des machines multicurs ). La tendance de lindustrie des microprocesseurs qui est
4

laugmentation du nombre de curs par processeur signifie que les stratgies telles que le pipelining vont devenir essentielles pour le dveloppement dapplications dans un futur proche. De manire gagner le plus de performances par le pipelining, les tapes individuelles doivent tre quilibres avec prcaution. Aucune tape individuelle ne doit mettre plus de temps que les autres. De plus, tout transfert de donnes entre les tapes doit tre minimis car alors une zone mmoire unique doit tre accde par plusieurs curs ce qui se traduit par une diminution des performances.

Vous aimerez peut-être aussi