Catégories:

…et une nouvelle débute sur de nouveaux défis

Fedy Abi-Chahla et Florian Charpentier
Mercredi 25 mai 2005 à 00:00 par Fedy Abi-Chahla et Florian Charpentier

Catégories: Processeur


…et une nouvelle débute sur de nouveaux défis

Lorsque nous disions, page précédente, que le dual core était la pire solution possible pour accroître les performances il ne fallait pas y voir une condamnation pure et simple de la technologie. Je suis pour ma part un fervent défenseur du SMP et c’est sur une machine bi processeurs que ces lignes sont tapées, aussi je suis content que cette technologie se démocratise par le biais des microprocesseurs dual-core. Tout ce qu’il fallait retirer de cette phrase volontairement provocatrice, c’est tout simplement que jusqu’à présent les architectes avaient mieux à faire de leur quota de transistors que d’ajouter un second core à leurs microprocesseurs.

Comme nous l’avons déjà dit, l’ajout du second core est inutile pour un très large pan d’applications monothread. Cette solution est également très coûteuse en terme de ressources vu qu’elle double le nombre de transistors. Enfin, même pour les applications futures il y a de nombreuses contraintes à la programmation multithread qui font que cela demandera de nombreux efforts aux développeurs pour en tirer réellement profit, si tant est que l’application s’y prête bien initialement.

Le problème fondamental est que notre cerveau n’arrive pas à suivre le déroulement d’un programme parallèle, nous ramenons inévitablement tout à une exécution séquentielle au final et les programmeurs ont beau être des gens bizarres aux yeux des autres personnes, ils n’en sont pas pour autant différents sur ce point. Et une fois ce premier obstacle franchi il en reste beaucoup d’autres. Il est ainsi courant de tomber dans des cas d’interblocage où chaque thread capture une ressource et attend que l’autre libère la sienne pour continuer. Un autre problème est celui de la famine où un thread tente désespérément d’acquérir une ressource à des moments où elle n’est jamais disponible (les joies de l’ordonnancement !). Tous ces problèmes sont connus depuis plusieurs dizaines d’années et ont été illustrés notamment par le célèbre problème des philosophes de Dijkstra. Il existe évidemment des solutions à tous ces problèmes mais comme bien souvent elles ne s’acquièrent qu’avec une certaine expérience de la programmation parallèle.

Le principal fléau de la programmation parallèle reste l’aspect non déterministe de certains bugs. Du fait de l’ordonnancement des threads il n’est en effet pas toujours possible (il serait en fait plus correct de dire « souvent impossible ») de les reproduire avec un scénario type, ce qui rend le débuggage d’une application threadée long et fastidieux. Pire encore : certaines applications multithreadées marchant parfaitement sur des machines monoprocesseur peuvent révéler des bugs sur des machines multiprocesseurs ! Un véritable casse tête pour le programmeur. Et si malgré tout ça le programmeur parvient à se sortir de ce guêpier informatique alors peut être constatera-t-il un gain significatif de performances… ou peut être pas ! Il est en effet très facile de perdre tous les gains obtenus à l’exécution dans de trop nombreuses communications entre les processeurs ou par un mauvais découpage en threads insuffisamment indépendants et se battants pour l’accès à une ressource partagée, ce qui a pour effet de rendre l’exécution finalement séquentielle.

Vu les problèmes qu’implique la programmation parallèle il est compréhensible de voir les développeurs se concentrer sur une petite partie du code sur laquelle les bénéfices seront les plus importants. Il y a un adage courant en programmation qui dit que tout programme d’une certaine taille passe 80% de son temps dans 20 % du code. C’est donc cette partie du code qu’il convient d’optimiser. Si nous nous plaçons dans le cadre d’un jeu par exemple les principaux candidats à un découpage en thread sont les suivants :

  • Le moteur physique
  • Le moteur sonore
  • La traversée du graphe de scène

Le moteur de rendu pour sa part est un cas un peu particulier, c’est un gros consommateur de ressources CPU mais la plupart du temps est passé à l’intérieur du driver de la carte graphique et le driver est par nature séquentiel vu qu’il communique avec le GPU qui est une machine à états. Malgré tout, plusieurs processeurs sont tout de même profitables dans cette situation car le temps passé dans le driver est moins déterminant pour les performances vu que l’autre CPU est libre à ce moment. Plutôt donc que de se battre pour threader le moteur de rendu qui ne s’y prête vraiment pas, il vaut mieux s’assurer que le reste du code est suffisamment bien parallélisé afin que lorsque le thread de rendu est bloqué dans le driver, les autres CPU puissent effectuer un travail utile.

La bonne nouvelle c’est que tout n’est pas aussi noir que nous l’avons laissé paraître : il existe des outils pour aider le programmeur à paralléliser son code qu’il s’agisse de l’API OpenMP ou de certains compilateurs « autoparallélisants » comme le compilateur C++ d’Intel.

La mauvaise nouvelle maintenant est que ces outils sont en très grande partie inutiles ! Plus sérieusement disons qu’ils ne résolvent pas les problèmes fondamentaux de la programmation parallèle. Ils sont peut être capables de paralléliser certaines boucles ou de rendre la vie du programmeur un peu moins pénible mais il ne faut pas s’attendre à les voir générer un code multithread optimal à partir de n’importe quelle « soupe » venue. Par conséquent les gains à attendre de la part de ce genre d’outils sont modestes tout au plus. Pour tirer au mieux parti des avantages offerts par les processeurs multi core il faut repenser ses algorithmes pour les adapter à une forme qui se prête bien au parallélisme, et ça aucun compilateur n’a une connaissance du programme pour le faire à la place du programmeur.


Annonces Google
Commentaires

Nesskiel 25/05/2005 07:05
Masquer
-0+
Nesskiel
Tu es un peu "dur" en ce qui concerne les appli multithreadées(y'en a quand meme pas mal ;) ). Perso je passe mon temps à en écrire et je dois dire que je suis des plus interessé par un X2 ou P4D. Il existe pas mal de mécanisme pour correctement gérer le multithread, c'est sur que si l'architecture du soft est mal pensée alors ca va pas le faire. :-/

Bon ok, c'est pas le lieu de parler des appli pro, donc vu que tu as eu entre les mains ces machines, est ce que le coté "confort" à l'utilisation est plus présent que sur machine monocore? car ca aussi c'est important. De plus vu le monstre en ressource que M$ prépare, ca va peut etre pas non plus du luxe.

Ness
joce 25/05/2005 08:38
Masquer
-0+
joce
moi j'aimerais voir un jour un test sous XP64 histoire de voir si le scheduler change quelque chose aux perfs
Florian c 25/05/2005 08:44
Masquer
-0+
Florian c
nesskiel > Perso j'aurais tendance à dire le contraire, des applis multithreadés, j'en vois pas tant que ca pour une utilisation de "geek" (jeux, compression audio de qualité -> Lame, applications bureautiques et browsers, logiciels de compression, etc. soit la majorité des applis utilisées quand même...). ;) Cela étant, même pour ce type d'utilisation le multi-tâche permet tout de même d'apprécier ces processeurs. Mais à condition que ca soit intensif. Le gain en confort d'utilisation avec les X2 / PD, je ne l'ai clairement pas ressentit avec le premier scenario multi-tâche de ce test par exemple (même si faire des benchs c'est l'usine, et que ca te laisses forcément moins de sensations qu'en utilisations classique). Par contre, avec deux applis lourdes, ce gain est évident et franchement appréciable, et là même le HT n'y fait pas grand chose.
Florian c 25/05/2005 08:47
Masquer
-0+
Florian c
joce > yep mais laps de temps un peu court + indispo du Pentium XE donc pas pu le faire pour l'instant :/
YannOucH 25/05/2005 09:56
Masquer
-0+
YannOucH
Citation :Bref, l’Athlon 64 X2 4800+ est aujourd’hui le processeur ultime, quasiment imbattable quelle que soit la situation (hors Athlon FX 55 il est vrai).


Attention pitite faute ;) !
cyrano 25/05/2005 10:14
Masquer
-0+
cyrano
Les accroissement de vitesse supérieur à 100% peuvent aussi s'expliquer par le partage du cache entre les 2 processeurs d'AMD. En gros, un proc va chercher une donnée en RAM, elle est également dispo pour l'autre processeur.
sylvere 25/05/2005 10:57
Masquer
-0+
sylvere
De l'article:"La consommation est environ 75 % plus élevée que l’Athlon 64 de même fréquence et même cache, et atteint environ 102 W"

Vous l'avez réellement testé ou c'estun chiffre pris comme ça?
Parcque ce chiffre est contradictoire avec ces 2 pages tirées d'autres cites (désolé je veus pas faire concurence avec cet article patapé)
http://www.hardware.fr/articles/571/page3.html
et
http://www.tomshardware.com/cpu/20 [...] on-19.html


Florian c 25/05/2005 11:02
Masquer
-0+
Florian c
Oui, on l'a réellement testé. Le résultat est d'ailleurs assez proche de celui de Marc qui lui prend en compte la plateforme complète (juste le CPU dans notre cas). Quand au test de Tom's, le protocole utilisé est une blague, et il n'est pas précisé si le 4000+ est un .13µ ou .09µ d'ailleurs.
joce 25/05/2005 12:57
Masquer
-0+
joce
Djlauby a écrit :

Oui, on l'a réellement testé. Le résultat est d'ailleurs assez proche de celui de Marc qui lui prend en compte la plateforme complète (juste le CPU dans notre cas). Quand au test de Tom's, le protocole utilisé est une blague, et il n'est pas précisé si le 4000+ est un .13µ ou .09µ d'ailleurs.



le 4000+ existe en .13 ?:
Florian c 25/05/2005 13:00
Masquer
-0+
Florian c
Ben oui, c'est le ClawHammer (revision CG), ca ne fait que très peu de temps qu'il est remplacé par la révision E4 (San Diego). D'ailleurs les 4000+ actuellement disponibles semblent encore tous des ClawHammer.
joce 25/05/2005 13:28
Masquer
-0+
joce
le CG existait aussi en 0.09, c'etait pas reserve au san diego :) (quoi que apparement pas pour le 4000+ ?)

Mais sinon oui apparement le 4000+ existe en 0.13 effectivement :D
Florian c 25/05/2005 13:33
Masquer
-0+
Florian c
Si, le stepping CG est réservé aux ClawHammer et NewCastle, qui sont tous les deux en .13µ. Côté .09µ, les Venice ont le steppping E3, Winchester E0, San Diego E4, Toledo E6, entr autres.
joce 25/05/2005 13:37
Masquer
-0+
joce
Ah oui j'ai confondu avec le winchester au temps pour moi :o
Florian c 25/05/2005 13:41
Masquer
-0+
Florian c
Aucune excuse, les différents cores/steppings chez AMD, c'est vraiment trop simple à suivre [:alex666]
cyrano 25/05/2005 14:06
Masquer
-0+
cyrano
niveau taille, sur les cpu amd monocore, il ya 33% de place pour le core, 33% pour la mémoire et 33% pour les pad. Si on rajoute un core, on augmente la conso de 33%. Ensuite, le taux d'utilisation pas et mémoire doit aussi augmenter mais on est loin de doubler (en théorie) la conso.
Nesskiel 25/05/2005 20:44
Masquer
-0+
Nesskiel
Djlauby a écrit :

nesskiel > Perso j'aurais tendance à dire le contraire, des applis multithreadés, j'en vois pas tant que ca pour une utilisation de "geek" (jeux, compression audio de qualité -> Lame, applications bureautiques et browsers, logiciels de compression, etc. soit la majorité des applis utilisées quand même...). ;) Cela étant, même pour ce type d'utilisation le multi-tâche permet tout de même d'apprécier ces processeurs. Mais à condition que ca soit intensif. Le gain en confort d'utilisation avec les X2 / PD, je ne l'ai clairement pas ressentit avec le premier scenario multi-tâche de ce test par exemple (même si faire des benchs c'est l'usine, et que ca te laisses forcément moins de sensations qu'en utilisations classique). Par contre, avec deux applis lourdes, ce gain est évident et franchement appréciable, et là même le HT n'y fait pas grand chose.




je suis pas d'accord:


Ok y'a des appli Pro (et oui j'ai des licences :p; j'ai rebooté la machine y'a pas longtemps non plus donc c'est pas de loin au max et j'ai pas beaucoup bossé :D ) mais rien que mon outlook est bien content d'avoir un P4HT car sur une machine P4 non HT je vois une sacre difference. Mais bon, comme toujours ca depend de ce que l'on fait avec ca machine... :)

Ness
Florian c 25/05/2005 20:51
Masquer
-0+
Florian c
Mmh, avec 4 % d'utilisation CPU le dual-core ou même l'HT n'apporte rien dans cette situation. CF situation multitâche 2 (première partie de la page 10). Le nombre de threads ne fait pas tout, faut voir ce que demandent les threads après, mais le scheduler n'est pas là que pour faire joli non plus. :o Après avec des applis un peu plus gourmandes ou quand ces applis ne sont plus en idle, je dis pas.
ive@IDN 19/08/2005 17:17
Masquer
-0+
ive@IDN
Désolé de poser une question qui va vous paraitre noob, pour vous, mais j'aimerai bien m'acheté un Dual core (A64x2 4400^^) parsque je fait pas mal de compression video, et aparement il y a deja pas mal de logiciel qui exploite cette technologie, enfin bref cela serait d'un grand confort pour moi dans mes operation video qui me demande enormement de ressource proce^^ pour premierement soit passé a un autre travail plus rapidement, ou alor carement faire deux tache de compression de video en meme temps, (j'arrete pas d'en rêvé) et la gain de temps enorme pour moi^^

Bon apres désolé, j'ai cherché avec mon ami google et j'ai rien trouvé a la question que je vais posé, alor si vous pouvez me repondre ou m'aiguillé sur des sites ou forums ou ils en parlent je veu bien^^

Donc voila, j'ai vu,revu et lu,relu tellement de tests dans tout les sens, qui montre des Benchs, qui montres des scenarios multitaches, mais comment procède ton, pour dire a windows : toi utilise ce proce et toi lotre? grossierement c'est ca ma question, j'ai lu nul par comment cela se passait et comment on faisait, si il fallait des logieciels special pour latribution de tache, etc...

Merci de votre aide^^.
cyrano 19/08/2005 22:41
Masquer
-0+
cyrano
Cela peut se faire mais globalement c'est le boulot de l'os de faire cela. Les 1er version de windows était très mauvais en SMP, il était capable de mettre les 2 process lourd sur le même cpu.

Linux est super bon depuis le 2.6. Windows XP doit maintenant faire un travail correct.
dradenvandewind 15/04/2006 18:11
Masquer
-0+
dradenvandewind
ça serait pas mal de faire un test avec X264 comme soft de compression ainsi que divx6 ... pour voir le fps(avec différentes tailles d'images full D1,CIF ou qcif..) ..
j'attends de trouver un test avec ce soft avant de me décider à acheter cet X2 ou ... :bounce:

c'est vraiment gourmand en ressource ....

A savoir Vous allez poster en tant qu'utilisateur anonyme.

  •  

Annonces Google