Génération du schémas de communication

Figure 4.3: On présente ici une distribution plausible des noeuds de calcul sur le problème de couplage. Il y a plus de noeuds gerant la dynamique moléculaire que pour le domaine continu. De plus la distribution ne correpond pas au découpage spatial ce qui est le cas générique.
\includegraphics[width=8cm]{schemas-com}

Le but de cette étape est en fait de décrire les échanges qui auront lieu lors de la simulation, mais aussi lors de la contruction de la matrice de contrainte. On rappelle que la dimension du système de contrainte est le nombre d'atomes contenus dans la zone spatiale du recouvrement.

Pour bien comprendre ce qu'il va se passer, on peut s'aider du schémas 4.3. La matrice de contrainte sera contenue dans le monde continu et dans le monde atomique. Elle sera contenue deux fois. En revanche, dans chacun de ces mondes, elle sera distribuée. Dès lors, le calcul de cette matrice va etre effectue en parallel. Mais pour cela il faut normaliser la procédure qui permet de construire le schemas de communication.

Figure 4.4: Suivant la meme distribution que dans les autres exemples, on montre les zones gerée par chacun des noeuds de calculs.
\includegraphics[width=12cm]{proc-schem-com}

Après la réalisation des pondérations, ce qui est connu par chaque processeur, ce sont les degrés de libertés à corriger. La figure 4.4 montre la connaissance spatiale de chacun des noeuds dans un cas simple.

Donc les noeuds dédiés à la dynamique moléculaire connaissent la dimension du système et de la matrice de contrainte. En revanche, les noeuds dédiés à la mécanique continue ne peuvent pas connaitre cette information. Afin de minimiser l'opération d'échange qui va suivre, les noeuds MD envoient, non pas une liste d'atomes mais une figure geometrique qui contient les atomes locaux et diffuse cela a tous les propriétaires de mécanique continue (cette geométrie sera basée sur celle des boites) donc à base cubique.

Les noeuds de mecanique continue recoivent de la part de tous les noeuds MD des zones geométriques qui contiennent l'espace de couplage. A partir de cette information, chaque noeud MC déduit quels seront ses interlocuteurs, et ce grace a l'intersection avec sa propre géometrie (un noeud sera mon interlocuteur si l'intersection de ma geometrie avec les boites d'atomes qu'il gère n'est pas vide).

Dans une phase collective, les noeuds MC se déclarent à leur interlocuteurs MD. Un prémice de schémas de communication est donc implanté, puisque tous les noeuds de calculs, quelque soit leur type savent quels seront leur interlocuteurs. En revanche les noeuds MC ignorent encore les positions et la quantité d'atomes qu'il devront gérer tandis que les noeuds MD ignorent la répartition des atomes sur ces derniers.

Dans la phase qui suit, les noeuds MD envoient uniquement à leur interlocuteurs une liste d'atome et leurs coordonnées spatiales. Les noeuds MC recoivent ces informations par processeurs et ignorent ceux hors de leur géométrie.
Dans une phase collective, les noeuds MC qui rejettent certains atomes précisent à leur interlocuteurs les atomes qu'ils ne gerent pas. Cela permet de construire la liste exacte, par atomes, des destinataires dans la procedure de communication.

Désormais on peut donc construire les objets DuoDistributedVecteur pour chaque processeur présent sur la grappe qui devra gérer une zone de recouvrement.

Figure 4.5: On présente le problème de l'ordre du vecteur. En effet suivant la distribution spatiale, il peut arriver comme sur le figure dans le pire des cas, que les atomes soient enchevétrés.
\includegraphics[width=6cm]{probleme-de-tri}

A ce stade, chacun des noeuds de calcul connait le nombre d'atome qu'il gère. En revanche l'ordre dans lequel sont stockés les atomes peut différer comme par example dans le cas présenté par la figure 4.5. En effet il se peut que la distribution geometrique ne coincide pas avec la numérotation des noeuds de calculs, surtout dans des géométries cycliques. Afin de ne pas rompre le parcours optimisé des atomes(tri par boite) on ne va pas réordonner les listes d'atomes.

Cette fonction du recouvrement sera assurée par la méthode BuildControlPointsDistribution(). Cette fonction rassemblera les informations recoltées dans les étapes décrites ci dessus. En particulier cette methode construira un objet DuoDistributedVecteur, qui sera utilisé pour stocker la liste des destinataires (que l'on compressera lorsque c'est possible) et qui pourra etre utilisé pour recombiner ou réduire les deux vecteurs en un seul (Cela va servir dans la construction de la matrice de contrainte).

tougui 2005-09-08