11.4.3.3.2 : Réseau
Le réseau est l'élément le plus caractéristique d'un système distribué. Malheureusement, dans le domaine du calcul, c'est aussi celui qui est le plus variable.
D'un centre de calcul à l'autre, on peut en effet rencontrer toute une zoologie de couches physiques et de protocoles, allant de l'habituelle pile TCP/IP sur câble RJ45 à des interconnexions optiques dernier cri portant des protocoles réseaux exotiques dont la standardisation va de l'approximatif à l'inexistant.
Un calcul qui vise à être portable entre centres de calcul devra donc être capable de s'adapter à des interconnexions ayant une grande diversité de débits, de latences, et de protocoles natifs.
Le réseau relie les nœuds composant le système distribué selon des topologies parfois très éloignées des classiques hiérarchies de commutateurs câblés en étoile, tenant plutôt de la grille ou l'hypercube par exemple. Ces structures inhabituelles permettent de maximiser le nombre de premiers voisins de chaque machine, ce qui permet d'avoir des communications directes plus performantes.
Pour tirer parti de ces infrastructures, le code de calcul doit s'adapter en s'auto-organisant d'une façon qui maximise les communications entre premiers voisins, ce qui requiert d'avoir une connaissance minimale de la topologie du réseau. Mais comme la structure exacte est complexe et varie d'un centre à l'autre, des approximations sont souvent employés afin de simplifier l'implémentation du calcul.
Par exemple, une astuce parfois utilisée sur les réseaux en grille lorsque le calcul ne se prête pas naturellement à cette topologie est d'attribuer à chaque nœud une adresse logique unidimensionnelle attribuée aux machines en les numérotant selon une courbe de Hilbert (figure 46). Cela permet de ramener le problème de communication réseau à une seule dimension (communication avec le voisin d'avant et d'après dans le sens de la courbe) tout en conservant de bonnes propriétés de localité spatiale des communications.