Télécharger le Numéro « Spécial 2013 »




Recherche :

Le développement parallèle avec Intel Parallel Studio 2011
Pourquoi passer à la programmation parallèle

Télécharger l'article en PDF

A l’occasion de la sortie d’Intel Parallel Studio et des nombreuses avancées que les éditeurs préparent pour 2009 et 2010, Programmez ! vous propose de mieux comprendre la programmation adaptée aux processeurs à plusieurs coeurs. C’est ce que l’on appelle la programmation parallèle. C’est- à-dire capable d’exécuter plusieurs opérations, instructions, parallèlement sur plusieurs processeurs ou plusieurs coeurs. Complexe à maîtriser, le parallélisme est le mont Everest du développement. Nous vous proposons de l’aborder méthodiquement en posant les fondamentaux pour bien l’assimiler et éviter les erreurs les plus classiques. Vous verrez alors que l’on peut faire exploser les performances de certaines portions de son code ! Bonne découverte !

En 1965, Gordon Moore (cofondateur d’Intel) observait que le nombre de transistors contenus dans un semi-conducteur disponible sur le marché, doublait tous les 18 à 24 mois. C'est de ce constat empirique qu'est née la loi de Moore. En d’autres termes, les capacités techniques des ordinateurs s’amélioraient régulièrement, permettant aux programmes informatiques d'en tirer parti sur le plan de la rapidité d’exécution sans grandes modifications (souvent aucune). Ce constat a fait le bonheur de plusieurs générations d'informaticiens, au point que certains appelaient ce phénomène le " free lunch ". A cette époque, les fondeurs basaient le plus gros de leur discours marketing sur une course au Giga- Hertz, chacun se vantant d’aller plus vite que l’autre Depuis quelque temps, vous avez sans doute remarqué l'apparition de processeurs multi-coeurs allant de deux à quatre coeurs dans les offres constructeurs grand public. Cependant, vos applications ne tournent sans doute pas plus vite sur ce type de matériel. En effet les systèmes d'exploitation, les applications d'aujourd'hui ne sont pas adaptés pour tirer parti efficacement d'une archi tecture multi-coeur. Autrement dit, cette évolution matérielle n'est pas forcément vécue comme un gain important par les utilisateurs.

Pourquoi les fondeurs ont-ils changé de paradigme ?

Depuis quelques années les constructeursont été confrontés à des contraintes physiques fortes (chaleur & consommation) qui ne permettaient plus d'améliorer leurs offres en restant sur les mêmes bases techniques. Par exemple, Intel avait prédit dès 2006 que la température de ses puces reposant sur la microarchitecture Netburst (Pentium IV) atteindrait environ 6000 degrés en 2015, soit environ la température à la surface du soleil. Ne pouvant plus croître sur le plan des Hertz, les constructeurs ont choisi de répartir la puissance sur plusieurs coeurs au sein d'un même processeur (architecture multi-coeur). La course aux Hertz est donc terminée, place à la course au nombre de coeurs ! Dès aujourd'hui, les constructeurs de microprocesseurs disposent de nouvelles plates-formes sachant grandir facilement en nombre de coeurs tout en améliorant les performances de l'infrastructure interne du processeur lui-même. Le tout dernier processeur Intel Core i7 (Nehalem) rencontre déjà un franc succès auprès de constructeurs d'or-

1re partie

dinateurs. Les ordinateurs de demain seront donc massivement multicoeurs (supérieur à 8 coeurs), les américains parlent du passage du Multi-core au Many-core, ce qui peut sembler une bonne nouvelle.

Les systèmes d'exploitation sont déjà en cours d'adaptation

De leur côté, les éditeurs de systèmes d'exploitation sont conscients que leurs produits ne sont plus adaptés pour exploiter correctement ces nouvelles architectures matérielles. Les prochains systèmes profiteront de ces nouvelles offres qui aujourd'hui peuvent sembler exagérées au regard des besoins actuels, mais n'oublions pas que le monde change et que les progrès techniques ont toujours été porteurs d'innovations qui aujourd'hui nous apparaissent normales. A titre d’exemple, dans sa version 64 bits, le prochain système Windows sera capable de gérer pleinement 256 coeurs. Nous comprenons mieux avec cet exemple la nouvelle appellation Many-core pour qualifier des matériels regorgeant de coeurs.

The free lunch is over

Dès 2005, Herb Sutter, célèbre architecte C++ de Microsoft, annonçait "The free lunch is over". Autrement dit, les gains de performances de vos applications constatés sur les nouveaux matériels sont terminés. C'est donc aux développeurs de réviser leurs codes pour retrouver de la puissance. Dans ce contexte, pouvons- nous affirmer que le " free lunch " est définitivement révolu ? Pour enrayer cette catastrophe, devons nous engager une révision radicale dans nos pratiques de développement ?

Conséquences pour les développeurs

Pourquoi peu de développeurs connaissent la programmation parallèle ? Pour les développeurs, la prise en compte effective de ce changement technologique peut se révéler très compliquée. Rappelons qu'il y a déjà une petite vingtaine d’années que les techniques de multithreading se sont intégrées dans un écosystème fortement séquentiel. Néanmoins, les détracteurs du parallélisme peuvent trouver de nombreuses raisons pour ne pas s'adapter à cette nouvelle donne. La culture séquentielle à l’origine de l’informatique peut être considérée comme la plus légitime. Nous sommes aussi certains que le cerveau humain éprouve des difficultés à raisonner en multitâche ce qui peut être vu comme un frein pour le passage en mode parallèle. Aujourd’hui, nous pouvons reconnaître que les environnements de programmation comme les outils, les librairies, offrent peu d’adhérence avec ces concepts. Alors, comment s’assurer que la mise en parallèle de certaines parties du système est à la fois fiable et pertinente vis-à-vis du langage de programmation et de l’infrastructure matérielle ? Définir avec certitude que les notions d’isolation, d’immuabilité ou de synchronisation sont correctement exprimées vis-à-vis du problème posé au regard des environnements, des langages, des outils, sont des préoccupations essentielles que nous abordons difficilement, faute d’un outillage adapté. Dans le cas des langages C et C++ où l’héritage d’une culture séquentielle se comprend facilement (le langage C est issu d’une philosophie très système inspirée par la plate-forme UNIX AT&T originelle où la notion de multithreads n’existait pas) mais dont l’adaptation au multithreading est venue se superposer à un existant séquentiel donnant lieu à un jeu d’API rudimentaires difficilement compréhensibles pour le développeur non système. Initialement, la notion de thread à été introduite pour offrir aux développeurs un moyen de paralléliser du code sans avoir à créer plusieurs processus systèmes (très coûteux sur le plan des ressources du système d'exploitation). On constate avec le recul que de nombreux environnements se sont inspirés des interfaces vétustes originelles, plaçant le multithreading au rang des technologies réservées aux experts.

Les principaux écueils de la programmation parallèle ?

Après 20 ans de multithreading, nous pouvons reconnaître que les modèles parallèles sont à la fois peu répandus, peu connus, et difficiles à implémenter. Pour un novice en développement parallèle, Il est très facile de provoquer de nombreux problèmes potentiels sans forcément les constater. En effet, l'exécution parallèle ne nous offre pas de certitude sur l'ordre d'exécution des instructions associées aux threads courants : le principe d'incertitude énoncé par Heisenberg défini en physique quantique à été renommé Heisenbug pour qualifier ce principe en informatique. En d'autres termes, toute ressource partagée par plusieurs threads doit faire l'objet d'une protection, sinon gare aux incohérences des résultats. Pour illustrer la dimension des difficultés rencontrées, nous pouvons citer les erreurs les plus courantes en programmation parallèle :

Race condition
Le code C# ci-dessous, pourtant très simple est tout de même faux dans le cas où la propriété Status est plongée dans plusieurs threads parallèles.

public class StatusManager
{
private int _status;
internal int Status
{
get
{
return ++_status;
}
}
}

Si de nombreux threads appellent simultanément cette propriété, l'exécution se déroulera souvent correctement mais parfois l'incrémentation sera fausse lorsque les threads se chevaucheront sur l'instruction d'incrémentation. De nombreux développeurs imaginent que l'opérateur d'incrémentation est atomique alors qu'il n’en est rien comme le montre le code assembleur.

MOVE EAX, [_status]
INC EAX
MOVE [_status], EAX

Le danger est que cette erreur est silencieuse et il est possible que personne ne la relève avant longtemps. Imaginez le cas où notre valeur représente le prix d'un produit financier, les conséquences pourraient être graves. La race condition, est sans doute l'erreur la plus populaire dans la programmation parallèle. Pour corriger notre code il nous suffit de remplacer notre opérateur d'incrémentation par une méthode InterLocked. Increment(ref _status) qui nous assure une exécution atomique. Cependant, les ressources à protéger ne sont pas toujours des entiers, mais sont souvent des types complexes. Dans ce cas, nous ferons appel à un outillage de synchronisation plus polyvalent. En contrepartie, ces outils peuvent occasionner de nombreux problèmes qui aboutissent parfois à des codes parallèles plus lents que leurs équivalents séquentiels. Voici d'autres exemples souvent rencontrés dans le cadre la programmation parallèle.

Bruno Boucard


Actualités

Intel Parallel Studio 2011 Getting Started


Pratique

Supplément C++
Téléchargez gratuitement le supplément de 24 pages, publié en Juillet 2011
Télécharger le PDF

Livre blanc


Téléchargez le Guide Intel Parallel Studio : toutes les infos et les liens ! Pratique, forum, downlaoad, cas clients etc.
Faites évoluer votre code
• Pourquoi passer à la programmation parallèle
• Simplifier le développement parallèle
• La chasse aux bogues parallèles
• Plus de coeurs, plus rapide, plus de montée en charge
• Vous ne reconnaîtrez plus votre C++

Téléchargez le PDF complet
Intel Parallel Studio 2011

Intel propose une nouvelle gamme d'outils de développement d'applications pour profiter du multicore via une programmation parallèle. Il s'agit de l'Intel® Parallel Studio qui d'adresse aux développeurs Windows qui possèdent Visual Studio* C/C++2008. Ce nouvel outil est en fait un ensemble qui réunit , Parallel Advisor pour diagnostiquer le code quant aux possibilités de parallélisation, Parallel Composer pour incorporer du parallélisme à l'aide d'un compilateur C++ Intel et des bibliothèques thread safe, Parallel Inspector pour découvrir des conflits de threading éventuels et Parallel Amplifier pour diagnostiquer le comportement des threads.




Liens
Page d'accueil Intel Parallel Studio
Présentations vidéos

Actu

Pratique


Actu


Distributeurs INTEL

FRANCE

Micro Sigma
+ 33 (1) 55 90 99 16
http://www.microsigma.fr/intel
info@microsigma.fr

Comsoft-SOS Developers
Tel 0825 07 06 07 – 0825 07 06 08 (fax)
www.comsoft-direct.fr/intel
infos@comsoft.fr

ALLYS
+33 (0)1 4763 9344, +33 (0)1 4763 9344
http://www.allys-soft.com
allys@allys-soft.com

Insight France
+33 (1) 30 67 25 00
http://fr.insight.com
linfo.fr@insight.com

RITME INFORMATIQUE
+33 (0) 1.4246.0042, +33 (0) 1.4246.0033
http://www.ritme.com
info@ritme.com

Software Technology Resources
+33 (1) 30 70 61 61
http://http://www.str.fr
contact@str.fr

transtec S.A.R.L.
+33 (0) 3.88.55.16.00, +33 (0) 3.88.55.16.09 (fax)
www.transtec-cluster.com
ccenter@transtec.de


BELGIQUE

ttec Computers B.V.B.A.
+32 (0) 800 93 920, +32 (0) 800 93 921 (fax)
www.transtec-cluster.com
ccenter@transtec.de

SOS Developers
+32 (0800) 74.756, +32 (0800) 74.757 (fax)
http://www.sosdevelopers.com/
benelux@sosdevelopers.com


SUISSE

COMSOL AG
+41 (31) 998.44.11, +041 (31) 998.44.18 (fax)
http://www.comsol.ch/Intel
info@comsol.ch

PC-Ware Systems (Schweiz) AG
+41 41 925 50 50, +41 41 925 51 51 (fax)
http://www.pc-ware.ch
mail@pc-ware.ch

SCIENTIFIC SOLUTIONS
+41 021 711 15 20, +41 021 711 15 21 (fax)
http://www.scientific-solutions.ch
info@scientific-solutions.ch

SOS Software Service GmbH
+41-52-728 07 38; +41-52-720 93 70 (fax)
http://www.sos-software.ch/intel
intel@sos-software.ch

transtec Computer AG
+41 (0) 44/818 47 00, +41 (0) 44/818 47 20 (fax)
www.transtec-cluster.com
ccenter@transtec.de

Programmez.com - 2013 - Tous droits réservés
Développement - WEB - ASP - PHP - C++ - Delphi - Java - Magazines - Ressources - Forum - Télécharger - Video - Emploi - Campus - .Net - Tutoriels

Le présent site Web est édité par Go 02, Sarl inscrite au RCS de Paris sous le N° 411321366 et dont le siège social est au 21 rue de Fécamp 75012 Paris.
Adresse de courrier électronique :diff@programmez.com

Le directeur de la publication du site www.programmez.com est Jean-Claude Vaudecrane en qualité de gérant de la sarl GO 02

Le portail du décideur informatique en entreprise : Solutions & Logiciels