11.4.3.3.4 : Limite des messages


Les interfaces basées sur les messages comme MPI constituent le niveau minimum d'abstraction du réseau avec lequel il est possible d'être productif dans un contexte de calcul. Mais elles demeurent très difficile à utiliser directement.

Utilisées naïvement, elles conduisent très facilement à un calcul inefficace~:

  • L'envoi de messages de petite taille a un coût par octet transféré très important par rapport à ce qu'il est possible de faire avec de gros messages.
  • Les communications collectives (de type diffusion, réduction, ou pire all-to-all), quand elles sont appliquées à l'ensemble du système distribué, ont des coûts en ressource réseau gigantesques. Elles doivent être employées avec une extrême parcimonie, et ne seront probablement plus utilisables du tout sur des super-calculateurs futurs.
  • La plupart des bibliothèques fournissent par défaut des garanties comme la fiabilité de distribution ou le respect de l'ordre des messages transmis entre deux pairs, qui conduisent à une utilisation inefficace du réseau lorsqu'elles ne sont pas requises.
  • La communication synchrone bloque toute activité CPU pendant la transmission réseau, qui est très longue au regard des temps de calcul, alors que les interfaces réseau modernes n'imposent aucunement cette contrainte.


À l'inverse, l'utilisation experte des bibliothèques de messagerie est très difficile et conduit fréquemment à des erreurs subtiles dans le code~:

  • Les communications asynchrones requièrent une gestion mémoire complexe pour éviter de libérer ou modifier les données en cours d'envoi, ou de lire trop tôt les données en cours de réception.
  • Les communications sans copie mémoire requièrent souvent l'utilisation de méthodes d'allocation mémoire spécialisées, très difficile dans les langages de programmation généralistes où les bibliothèques n'exposent que rarement un contrôle sur la méthode d'allocation mémoire.
  • Les communications désordonnées requièrent un grand effort de réflexion de la part du programmeur, puisque celui-ci doit prendre en compte toutes les manières dont les messages peuvent être intervertis.
  • Les communications non fiables requièrent une gestion complexe des erreurs, surtout quand elles sont asynchrones.
  • Les communications collectives non globales requièrent souvent une profonde restructuration du calcul pour l'adapter à la hiérarchie des communications locales.


Ces erreurs peuvent rester invisibles durant le développement, si elles ne se manifestent que dans des conditions d'exécution inaccessibles à ce stade noteLe centre de calcul de production étant rarement disponible à la demande pendant le développement, celui-ci doit être largement effectué sur des machines ayant un nombre de nœuds bien plus faible que la machine finale..

Pour toutes ces raisons, de nombreuses recherches sont en cours pour mettre au point des abstractions de communication offrant un meilleur compromis ergonomie / efficacité que la communication par message.