Calcul Parallèle

1) Introduction

On aborde l'algorithmique parallèle par les réseaux pair-à pair. Le cas le plus simple se présente comme p pairs numérotés de 0 à p-1, ayant une même capacité de mémoires M et une même vitesse de calcule v, reliés entre eux par le réseau Internet selon un débit maximum w identique pour chaque pair, et un delais de transmission dt constant.

On oriente le langage de programmation pour exploiter le reseau pair-à-pair. On définie pour cela les 4 procédures de base suivantes :

Send(S,p) : Envoyer un message S au noeud p.
S = Recept() : Lire le message le plus ancien et le retirer de la file d'attente des messages reçues.

WPut(S,D) : Publier sur le noeud en cours, la donnée D sous le nom S.
D = WGet(p,S) : Lire la donnée D publiée par le noeud p sous le nom S.

Les messages reçus sont empilés automatiquement par un protocole de bas niveau dans une file d'attente. Puis on consulte régulièrement cette file d'attente pour traiter les messages reçus.

Il y a deux façons de transmettre des données, soit directement par l'envoi d'un message, ou soit indirectement par la publication, c'est à dire en plaçant la donnée sur Internet à l'adresse http://<IP du noeud>/<nom S> ou à l'adresse ftp://<IP du noeud>/<nom S>, chaque noeud faisant office de serveur http ou ftp.

Cette approche permet d'aborder le calcul parallèle en tenant compte des contraintes liées aux transmissions des données. On s'aperçoit alors que l'élaboration de protocoles de transmissions correspond au développement d'un langage de programmation orienté calcule parallèle tenant compte des contraintes liées aux transmissions.

On y définie un premier type de réseau dit procédurale correspondant à l'ordinateur, avec un unique processeur, sa mémoire vive et ses disque durs. C'est le plus petit réseau que l'on considére. Le principe reste valable pour les ordinateurs actuelles qui ont quelques processeurs. Les rôles de pairs sont joués par les processus. Dans ce réseau procédurale, le calcule parallèle est artificiel. Il est software et non hardware. Il est implémenté comme sur un système UNIX où chaque processus se partage à tour de rôle les réssources du système UNIX. Pour qu'un processus A envoit un message à un processus B, il faut que le processus B soit en écoute, et cela signifie qu'il doit régulièrement consulter la file d'attente des messages reçus, et cela signifie donc qu'il faut une file d'attente des messages reçus, ce que le système mettra en oeuvre et qui correspondra au premier étage de l'interface réseau de réception de l'hôte B qui est raccordé au segment dans un réseau filaire.

Les deux façons précédement décrites de transmettre des données correspondent soit à un multicast utilisant une file d'attente mise en oeuvre chez l'émetteur, ou soit à un unicast utilisant une file d'attente mise en oeuvre chez le destinataire.

2) Le broadcast

Le premier programme que l'on concidère est le broadcast, c'est à dire l'envoi d'un message à tous les noeuds. Plusieurs algorithmes sont possibles. On procède à une classification :

  1. Soit chaque noeud possède la liste de tous les noeuds présents.
  2. Soit seulement quelques noeuds possèdent la listes de tous les noeuds présents.
  3. Soit aucun noeud ne possèdent la liste complète.

L'algorithme comprend deux parties, l'une en amont, pour maintenir une information sur le réseau pair-à-pair qui est distribué sur le réseau lui-même, l'autre en aval, qui exploite cette information et qui lance un processus distribué pour produire le broadcast.

L'algorithme en amont va utiliser des aspects. L'aspect est un mécanisme en programmation qui agit en permanence en tant que protocole de bas niveau. Et l'algorithme en aval exécutera donc ces aspects qui sont parties intégrantes de l'algorithme en amont.

Cas 1 : On maintient dans chaque noeud une liste de tous les noeuds présents. La difficulté n'est pas résolue pour autant. Car un nouveau noeud qui rejoind le réseau n'a aucune liste pour l'accueillir. Il faut donc publier une liste de noeuds qui veulent bien servir de recruteurs. Cela peut être des noeuds quelconques qui en font publicité d'une manière quelconque.

Connaissant un tel noeud recruteur, le noeud voulant être recruté envoie un message I-WANT-TO-JOIN à ce noeud recruteur. Celui-ci va consulter sa liste pour vérifier si l'adresse IP du demandeur n'est pas déjà présente dans la liste, et pour lui trouver un numéro d'hôte, qui peut être le plus petit numéro libre par exemple. On voit alors la même problèmatique que pour le protocole DHCP, il faut déterminer un numéro d'hôte le plus approprié, et s'il n'y en a plus, changer la classe octale du numéro d'hôtes c'est à dire la taille du numéro d'hôte en nombres d'octets. Si nous réservons les deux premiers bits pour déterminer la classe, nous obtenons la classification suivante : classe C pour un octet (0-63), classe B pour 2 octets (0-16383) et classe A pour 3 octets (0-4194304).

Un noeud peut vouloir garder son numéro d'hôte utilisé antérieurement, et cette facultée peut lui êtres accordée par le réseau sous forme d'un baille. Le message I-WANT-TO-JOIN contient deux paramètres ; le numéro d'hôte revendiqué et le baille souhaité. Si le numéro d'hôte n'est pas réservé par un baille, il est pris et le baille est accordé, sinon on cherche le plus petit numéro sans baille.

La vrai difficulté consiste à gérer des demandes simultanées. L'éventuelle conflit n'apparait que lorsquon a prévenue tous les autres noeud du nouvel arrivant, Il faut donc commencer par prévenir tous les autres noeuds à l'aide d'un broadcast ADD...

---- 8 décembre 2013 ----