Parallélisme

[geek_mode=on]

Un microprocesseur, grosso modo, c’est une grosse calculatrice programmable avec de la mémoire. Elle fait des additions ou des multiplications les unes après les autres, de manière séquentielle.

L’amélioration des technologies et des procédés de fabrication permet d’augmenter la taille de la mémoire et de réduire la taille des transistors (les briques de base du microprocesseur) et donc la vitesse de traitement. Cette progression était jusqu’à présent exponentielle, comme la remarqué Gordon Moore avec sa fameuse « loi » : le nombre de transistors a doublé tous les deux ans ces trente-cinq dernières années.

Mais l’industrie est aujourd’hui confrontée à trois défis : (1) la dissipation thermique est très problématique et (2) les limites physiques dues à l’apparition de phénomènes quantiques se rapprochent et (3) tout ça coûte de plus en plus cher à fabriquer.

Pour limiter ces problèmes et continuer à proposer des produits de plus en plus performants, les fabricants ont trouvé la parade : on met plusieurs microprocesseurs en même temps. La plupart des machines vendues aujourd’hui en contiennent deux. Demain, ce sera huit ou trente-deux. Tout cela semble simple, non ? Pour calculer plus vite, il suffit d’ajouter des calculateurs.

En fait, tout devient plus compliqué. Les instructions ne sont plus exécutées les unes après les autres, dans un ordre strict, mais toutes en même temps. La seule contrainte est d’ordre logique : avant de calculer une opération, il faut d’abord calculer ses opérandes. Pour le reste, tout peut arriver dans n’importe quel ordre. Et aussi en parallèle, puisque plusieurs calculateurs travaillent dans la machine.

Or, il ne vous aura pas échappé qu’un programme informatique est une suite d’instructions, c’est-à-dire une séquence. Sur le papier ou sur l’écran, toutes les instructions sont donc dans un ordre strict. Cela pose des défis nouveaux aux programmeurs et aux chercheurs :

  • Comment passer d’une séquence d’instructions à diverses exécutions parallèles ?
  • Peut-on faire ce travail automatiquement ? À quel moment ?
  • Quels langages et quelles technologies utiliser ?

Avec ces nouvelles architectures dites multi-cœur, on a donc un problème de parallélisme et plus précisément un problème de distribution. Si un calcul est fait dans un des calculateurs mais que son résultat est nécessaire à un autre calculateur, il faut un mécanisme de communication entre les deux. Et la communication prend du temps. Et plus il y a de calculateurs, plus la communication va constituer une part importante de leur travail. Pour n processeurs, il faut au plus n×(n-1) canaux de communication, ce qui fait aussi une progression exponentielle.

Mais alors, me direz-vous, comment peut-on bénéficier de cette puissance de calcul parallèle ? D’abord, dans un ordinateur personnel, l’immense majorité du temps, le micro-processeur ne fait rien. On pourrait donc lui attribuer des tâches « de fond » comme indexer les fichiers ou plier des molécules. Ensuite, il existe de nombreux langages de programmation, qui ne sont pas nouveaux mais encore considérés comme marginaux, qui permettent de programmer de manière plus parallèle : les langages fonctionnels ou logiques, ou bien les langages synchrones par exemple.

Tout cela va nécessiter un changement radical dans la manière de programmer et beaucoup dans l’industrie informatique devront tout réapprendre.

Ce qui est, somme toute, assez réjouissant. :-p

Publicités

5 commentaires

  1. Nicolas · octobre 22, 2008

    Des études se poursuivent actuellement pour créer des « switchs » moléculaires (position 0 ou 1 en fonction de la position d’un groupement, d’une couleur dûe à un étage d’oxydation, d’une transition conformationnelle) afin de minimiser à l’extrème.
    Hey! Tu sais que j’ai lancé un calcul avec 256 processeurs en parrallèle sur le 39ème cluster le plus rapide du monde? 😀
    http://www.hpc2n.umu.se/resources/Akka/

    J'aime

  2. Anthony · octobre 22, 2008

    Voici une présentation à laquelle j’ai assisté en NZ et qui devrait (en partie) t’intéresser…

    https://www.se.auckland.ac.nz/conferences/VLDB2008resources/presentations/papers/K01.ppt

    J'aime

  3. Franc belge · octobre 22, 2008

    @Nico
    Waaah. C’est toi qui a la plus grosse (machine). Je suis battu à plate couture. 😀

    @Antho
    Merci !

    Very Large Data Base ? T’aimes les grosses (bases de données), petit coquin. 😉

    J'aime

  4. mongolito404 · octobre 22, 2008

    Il y a aussi la programmation concurrente. Et il parait que Erlang devient sexy dans le petit monde des applications web (2.0). Peut être qu’il pourrait aussi percer sur le desktop 😀
    http://fr.wikipedia.org/wiki/Programmation_concurrente
    http://fr.wikipedia.org/wiki/Erlang_%28langage%29

    J'aime

  5. Pingback: L’addition binaire pour les nuls | franc belge

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s