Parallel Computing le défi du siècle?

Avec l’arrivée massive sur nos bureaux de dual et quad core, les OS et programmes suivent-ils? Tirent-ils avantage des avantages théoriques du traitement parallèle offert par ces nouveaux processeurs?

Articles intéressants:
linux-mag.com/id/5379
eetimes.com/news/latest/show … =206504466
eweek.com/c/a/Infrastructure … eady-Here/

Résumé:
Le traitement parallèle est un énorme défi. Tellement difficile qu’il est souvent appelé le “Parallel Wall”.

Quelques extraits:
[ul]
[li]Le traitement parallèle est un problème critique non résolu et on a besoin d’une solution aujourd’hui.[/li]
[li]L’industrie essaye des dizaines de solutions différentes au problème pour n’en retenir que quelques-unes qui ne marchent qu’à moitié.[/li]
[li]L’industrie est quelque peu paniquée de l’état d’avancement des recherches.[/li]
[li]AMD, Intel, MS et Nvidia sont conscientes du problème et y travaillent activement.[/li]
[li]Toutes les sociétés devraient joindre leurs forces tellement le problème semble énorme. Seul le modèle GPL permettrait d’y arriver (article).[/li]
[li]*nux est en avance sur les autres OS. L’ordinateur le plus puissant à ce jour, l’IBM Blue Gene/L avec ses 478.2 teraflops (10^12 - trillards?- de calculs par seconde) sur une machine de plus de 10.000 processeurs PowerPC sous Linux. En fait, 85.2% des 500 super-ordinateurs les plus rapides du monde tournent sous Linux (article).[/li]
[li]Des logiciels Linux comme Autodesk, les compilateurs GCC et GCC 4.3 utilisent depuis longtemps le traitement parallèle (article)[/li][/ul]

Je vais attendre encore un peu avant de changer mes P3 et P4 :wink:

De toutes les manières, si le doublage du processeur peut mener sur un OS multitâche à un gain de presque 100% d’efficacité quand on passe de 1 à 2 processeurs, il est démontré si je me souviens bien de mon DEA temps réel qu’à part pour des traitements de nature fortement parallèle (sans ordonnancement), et implémentés spécifiquement avec une logique de parallèlisme (avec des threads sans mêmoire partagée), le gain de vitesse d’un systême de tâches préemptif sans contraintes particulières décroit rapidement (en 1/n, si je me souviens bien), en ajoutant des processeurs.
Donc deux processeurs, ça a un sens, mais plus, il faut des systêmes de tâches spéciaux pour en profiter, et c’est rarement le cas de ce qu’on fait tourner sur un OS.

Pas tout compris mais je devine. :wink:

IBM a trouvé une solution apparemment! 10.000 processeurs! Et un des journalistes prévoit que cette puissance de calcul se retrouvera sur nos bureaux dans 10 ans. Curieux de voir ça.

[quote=“ripat”]Pas tout compris mais je devine. :wink:

IBM a trouvé une solution apparemment! 10.000 processeurs![/quote] Techniquement, ce n’est pas spécialement difficile (pour d’autres que moi) de construire une machine à 10000 processeurs, ce n’est pas ce que je dit, mais par contre, ça ne prend son sens et son utilité que pour faire des calculs massivement parallèles (résistance des matériaux et éléments finis, météorologie, synthèse d’image temps réel, et quelques autres rares applications) ou pour héberger une flotte de machines virtuelles. Mais si tu veux faire tourner >une seule machine< (autrement qu’un unique OS hôte pour le parc de machines virtuelles) sur 10 000 processeurs, c’est contreproductif, car le gain sur le 10000ême sera 1/10000ême fois plus petit que le gain sur le deuxiême. [quote=“ripat”]Et un des journalistes prévoit que cette puissance de calcul se retrouvera sur nos bureaux dans 10 ans. Curieux de voir ça.[/quote] Aucun interet: tu vois combien de processus tourner, toi, sous ton OS: 10 000 ? Même en comptant les threads ?

Sous windows, il existe ça :
bill2-software.com/processmanager/

Sous linux, le fait que la distribution soit en 64 bits, mais est-ce que le procéder d’allouer une tache à un core pourrait être pratique ?

Alors le multi task ça a quelques dizaines d’années, l’arrivé de multicore grand public ne change pas beaucoup la donne (sauf pour windows que t’a pas le droit d’éxécuter sur plus de 2 processeurs simultanément, je crois). Les clusters et autres supercalculateurs sont vieux.

Aujourd’hui qu’est ce qui a besoin de puissance sur un PC grand publique ?
[ul]
[li]les jeux vidéo;[/li]
[li]les traitement vidéo/audio;[/li]
[li]OpenOffice.org ( :mrgreen: ).[/li][/ul]

Pour le premier oui le problème est complexe mais pas très important (ce n’est pas tout le monde qui joue aux jeux vidéo proprio).

Principalement optimisé via des cartes d’accélération graphique/audio, le processeur joue un rôle relativement limité. Mais les calculs sont suffisament simple pour pouvoir être parallélisé en réétudiant le code.

OOo [mauvais traitement de texte change de traitement de texte], il doit être reconçu parce qu’il est pas modulaire.

Le gain est de toute manière grand, chaqun des services sous linux peut tourner en parallèle, les programmes aussi. Avoir sont vlc qui plante en prenant beacoup de ressource et pouvoir tout de même lancer un terminal pour le killer c’est pas mal et ça demande simplement un bon ordonnaceur de tâche (celui de linux à était remplacé cet été).

Pour info apache et make peuvent utiliser autant de processeurs qu’on leur propose, je pense que c’est aussi le cas de gcc et de gimp mais je ne suit pas totalement sur.

De toute manière vive l’ADA :smiley:

[quote=“debianhadic”]Sous windows, il existe ça :
bill2-software.com/processmanager/

Sous linux, le fait que la distribution soit en 64 bits, mais est-ce que le procéder d’allouer une tache à un core pourrait être pratique ?[/quote] Hin ?

On peut pas tous les compter car tous ne sont pas vu par le noyau (ils existent qu’en interne à l’application). Mais ils n’est sans doute pas interessant de les prendre en compte.

$ ps aux | wc -l 86
(faut enlever 1 pour la première ligne)

[quote=“mattotop”][quote=“debianhadic”]Sous windows, il existe ça :
bill2-software.com/processmanager/

Sous linux, le fait que la distribution soit en 64 bits, mais est-ce que le procéder d’allouer une tache à un core pourrait être pratique ?[/quote] Hin ?[/quote]
Oops, j’ai pas écris tout ce que je voulais dire :wink: le clavier ne va pas assez vite !!
Sous linux, le fait que la distribution soit en 64 bits [optimise déjà pas mal le processeur], mais est-ce que le procéder d’allouer une tache à un core pourrait être pratique ?

Il peut être pratique si tu en sais plus que l’ordi sur les caractèristiques d’execution de tes processus, et que tu juges qu’il vaut mieux déplacer tes threads dans une autre file. Mais bon, c’est plutôt pour du gros calcul long, et il faut vraiment savoir ce que tu fais. C’est rare que ça ait une utilité: je ne peux même pas t’en citer.

Cela peut être intéressant effectivement car beaucoup de jeux se prêtent au traitement parallèle. Il existait un jeu sous Aplle][ (Cytron Master) avec des vaisseaux, que j’avais commencé à porter sur PC 8088 en utilisant du parallèlisme (j’avais fait des routines «fork» en C permettant le commutation de taches fondées sur l’horloge (pas terrible mais bon)). Mon idée était de mettre après plusieurs ordinateurs. Sauf les routines multitaches et le déplacement, le projet n’a pas abouti…)

Ça s’y prête avec les traitements parallèles d’images ou l’encodage de séquence video entre deux «keysframes»

[quote]
[*]OpenOffice.org ( :mrgreen: ).[/quote]
Là je ne vois pas l’intérêt. Tu n’as qu’un texte à formatter (donc aucun intérêt dans le parallèlisme) et même dans les feuilles de calculs, tu es obligé de hiérarchiser les calculs dont de les faire de façon séquentiel. Il est extrèmement dur de faire du parallèlisme sur une feuille de calcul, la difficulté est identique à celle consistant à faire un compilateur exploitant le parallèlisme: On peut exploiter un peu mais si on veut vraiment marquer la différence, il faut faire un programme spécifique avec des instructions spécifiques. Dans mon service militaire, j’avais programmé sur un Cray I en Fortran et on savait exactement dans quelles conditions très restrictives le parallèlisme était exploité.

[quote]
Le gain est de toute manière grand, chaqun des services sous linux peut tourner en parallèle, les programmes aussi. Avoir sont vlc qui plante en prenant beacoup de ressource et pouvoir tout de même lancer un terminal pour le killer c’est pas mal et ça demande simplement un bon ordonnaceur de tâche (celui de linux à était remplacé cet été).
[…]De toute manière vive l’ADA :smiley:[/quote]
Regarde l’occupation de ton CPU et de l’hyperthreading: Quand ton CPU est-il occupé à plus de 150%? C’est assez rare, la plupart du temps, il y a de toute façon un engorgement au niveau des données et de l’accès aux ressources matérielles: Une autoroute à 1000 voies avec un péage à 4 cabines ne débitera pas plus de voitures un premier août.
Bref, à ce jour, le pbm n’est pas dans les CPU mais dans le temps d’accès aux données. Il vaut mieux avoir 50G de RAM que 20 processeurs…

On peut pas tous les compter car tous ne sont pas vu par le noyau (ils existent qu’en interne à l’application). Mais ils n’est sans doute pas interessant de les prendre en compte.

$ ps aux | wc -l 86
(faut enlever 1 pour la première ligne)[/quote]Le noyau voit tout, même si ps ne permet pas de voir les threads. Si c’est “interne à l’application”, alors ça ne peut pas être gèré par le noyau, et ce n’est donc pas parallèlisable (sauf si l’appli elle même dispatche ses routines en threads).
Sinon, si tu veux quelquechose de crédible, il faut se rappeler que la grande majorité des process sont dormants.
Si tu veux compter ce qui tourne comme processus sur ta machine:

console@MAT64LIN:~$ ps xr | wc -l 2 Et ce, en comptant la ligne de titre, et en enlevant le ps lui même.

Je ne décrivais pas les tâches qui doivent être parralélisées mais celle qui prennent du temps d’exécution, nuance.

Personnellement j’ai 2Go de RAM et je ne l’utilise jamais à plus de 75%. Je pourrais prendre de la RAM plus rapide mais ça reste de la micro optimisation. Par contre je me refuse d’utiliser eclipse parce qu’il met 1 minutes à se lancer et qu’ouvrir un fichier prend 30 secondes et je ne parle pas de la sauvegarde qui compile en même temps (oui c’est paramétrable je suis au courant). Là c’est le processeur qui est solicité.

Je disais que le gain est grand potentiellement ou si à puissance de calcul égale ou inferieure par core on garde le même système.

On peut pas tous les compter car tous ne sont pas vu par le noyau (ils existent qu’en interne à l’application). Mais ils n’est sans doute pas interessant de les prendre en compte.

$ ps aux | wc -l 86
(faut enlever 1 pour la première ligne)[/quote]Le noyau voit tout, même si ps ne permet pas de voir les threads. Si c’est “interne à l’application”, alors ça ne peut pas être gèré par le noyau, et ce n’est donc pas parallèlisable (sauf si l’appli elle même dispatche ses routines en threads).[/quote]
Bien pour ça que je dis qu’ils sont pas tous visualisable. Ça sert par exemple pour perl à proposer des thread portables.

[quote=“mattotop”]Sinon, si tu veux quelquechose de crédible, il faut se rappeler que la grande majorité des process sont dormants.
Si tu veux compter ce qui tourne comme processus sur ta machine:

console@MAT64LIN:~$ ps xr | wc -l 2 Et ce, en comptant la ligne de titre, et en enlevant le ps lui même.[/quote]
pas faux :slightly_smiling:

Je relance le fil car je suis en plein dans ce sujet en ce moment.

Pour mes histoires de vision je dois lancer des longs calculs, sur un pentium dual E2160 ça prend 3 jours et un seul des 2 cpu tourne.
La librairie que j’utilise pour faire ces calculs est prévue pour faire du traitement parallèle (les threads sont envoyés sur les différents cpu suivant leur rôle) du coup si je lance le même calcul sur les 2 cpu ça me prend presque 2 fois moins de temps (quand on en arrive là on compte en demi-journée). En plus je peux encore faire des bricoles sur la machine sans trop la charger (cpu à 198% et encore 80Mo de RAM sur 2Go)

Bref, je ne dis pas ça pour me faire mousser, mais pour illustrer le fait qu’il faut vraiment tomber dans des applications bien spécifiques pour avoir besoin de telles fonctionnalités. Par contre il est très pratique d’avoir accès à ce genre de technologie quand on en a réellement besoin.
De plus si un blaireau comme moi a besoin de telles fonctionnalités on peut immaginer que cela va se développer. Peut-être que d’ici quelques années un ordi pilotera la porte d’entrée de notre baraque et qu’il faudra lui apprendre à reconnaître toutes les personnes autorisées à entrer.

Tout ce qui concerne l’imagerie et animation 3d semble être également un bel exemple d’applications bouffeuses de flops.

Attention, on en a brûlé pour moins que ça! :wink:
Sérieusement, c’est quoi ce truc de vision?

Bah en fait je me suis mis en tête de développer un logiciel de vision industrielle libre.

Au départ c’est parce que j’en ai marre d’être confronté à des offres de vision proprio dans mon boulot. Parce qu’à chaque fois qu’il faut rajouter une fonctionnalité on rajoute un morceau d’automate, la camera ne suit plus…

Bref, ce n’est pas le sujet de ce fil donc je ne vais pas m’étendre. D’autant que j’ai lancé une paire de topic sur le sujet dans la rubrique programmation.

Le rapport avec le parallel computing c’est qu’il existe un algo permettant de reconnaître un objet précis selon un descriptif (haar detection) et qu’il existe un autre algo permettant de générer le descriptif.
C’est cet algo qui me bouffe un charge cpu de malade mais qui peut être répartie.
Toujours dans la rubrique programmation j’ai fait un fil sur ce sujet (d’ailleurs encore merci à mattotop).
Edit : euh non en fait c’est dans support debian

Je ne m’étale pas plus, je ne veux pas sortir trop du sujet.

Bon par contre vu les bécanes que j’ai mises sur la tâche, je n’ai pas trop peur de l’incendie :wink:

[quote=“mattotop”][quote=“ripat”]Et un des journalistes prévoit que cette puissance de calcul se retrouvera sur nos bureaux dans 10 ans. Curieux de voir ça.[/quote] Aucun interet: tu vois combien de processus tourner, toi, sous ton OS: 10 000 ? Même en comptant les threads ?[/quote]Il paraît que certains avaient fait le même type de réflexion pour les 640Ko du premier PC. Jamais on utiliserait autant de mémoire disaient-ils.

quote="dmon"
Il paraît que certains avaient fait le même type de réflexion pour les 640Ko du premier PC. Jamais on utiliserait autant de mémoire disaient-ils.[/quote] C’est vrai, mais pourquoi est on monté au dessus des 640 Ko ? Pour faire tourner des windows et rendre obsolètes plus vite les machines.
C’est sûr que si on se met à faire des fonds d’ecran en image synthétisée temps réel, on trouvera bien un nouveau besoin pour 10000 processeurs, mais est ce que ça rend la conso éléctrique justifiée et le service rendu vraiment utile ?
Je vis bien avec une machine en console, et mes mailhubs sont des p3.

Tu touches là à une réflexion globale sur l’utilité du “progrès”. Ou plutôt le sens que l’on donne à ce mot. Mais il y aura autant d’avis que de personnes. Un utilisateur de 4x4 en ville trouvera légitime de l’utiliser puisque c’est son choix et qu’il l’a posé pour satisfaire son besoin de puissance, égo, domination, sécurité (cocher la case utile). De même pour les ordinateurs. Est-il vraiment utile de monter en puissance? Ou plutôt cette course au clicodrôme-iconodrôme-vidéodrôme contribue-t’elle au progrès informatique. Elle la rend en tout cas plus accessible à tous à défaut d’être plus efficace. Et ça, c’est déjà un vrai progrès. Quant à la plus grande efficacité de la ligne de commande dans des mains expertes, faut quand même avouer que surfer sur ce forum avec Lynx relève du masochisme pathologique tout de même!