1. Fonctionnement#

Le fonctionnement en parallèle sur des processus différents (utilisant MPI) nécessite un traitement particulier en cas d’erreur.

En effet, si rien n’est fait, si une erreur ne se produit pas sur tous les processeurs au même moment, c’est à dire entre les deux mêmes communications, un processeur s’arrête et les autres l’attendent à la communication suivante indéfiniment jusqu’à l’arrêt CPU et perte de tout le calcul.

Ce traitement particulier consiste à vérifier avant d’engager une communication globale que tous les processeurs sont au rendez-vous et dans quel état ils sont (ont-ils émis un message d’erreur ou pas).

  • S’ils sont tous au rendez-vous et qu’aucun n’a rencontré une erreur, on continue en procédant à la communication prévue.

  • S’ils sont tous au rendez-vous mais qu’au moins un processeur a émis un message d’erreur, on demande à tous les processeurs de s’arrêter comme d’habitude (en levant une exception).

Le comportement est alors le même qu’en séquentiel : erreur <S> (exception) et donc sauvegarde des fichiers de la base.

  • Si au moins un des processeurs n’est pas au rendez-vous (dans un délai convenu), c’est que ce processeur est bloqué sur une tâche beaucoup plus longue que sur les autres processeurs, ou dans une boucle infinie, une erreur de programmation, ou encore il a quitté brutalement.

Dans ce cas, on est obligé d’interrompre brutalement l’exécution des processeurs restants. La base ne doit pas être sauvegardée.

De plus, on fait une communication dans FIN pour récupérer le nombre d’alarmes émises (et non ignorées) par chacun des processeurs. Pour le diagnostic, fait sur le processeur #0, on émet une alarme qui donne simplement le nombre d’alarmes émises par processeur.

Ceci évite que de «louper» une alarme qui ne se serait produite que sur un processeur.