Le projet de blob computing s’inscrit dans le cadre de la communauté scientifique spatial computing. Cette communauté postule que les plateformes hardware du futur, qu’elles soient bio, nano ou vlsi, engloberont un très grand nombre d’éléments de calcul, disposés de façon homogène dans un espace 2D ou 3D. Ici, très grand signifie plus précisément qu'il sera impossible d’établir une communication rapide entre deux éléments quelconques ; le temps de communication étant, en moyenne, proportionnel à la distance métrique.
Dans ce contexte, plusieurs approches, telles l’amorphous computing ou le blob computing, tentent d’installer une première couche système sur ce computing medium, sur laquelle on peut ensuite ancrer du calcul parallèle efficace. Dans le blob computing, cette couche implémente une machine virtuelle appelée blob machine, qui est un exemple spécifique de machine auto-développante.
Une machine auto-développante est une machine virtuelle dont l'état est représenté par un graphe, chaque noeud de ce graphe contenant un automate avec pile et registres. Chaque automate possède un jeu d’instructions machine classique lui permettant de calculer avec sa pile et ses registres, et des instructions non classiques, dites auto-développantes, permettant de faire évoluer le graphe lui-même, en rajoutant ou supprimant des noeuds ou des arêtes vers ses voisins. L’intérêt principal est qu’il est possible de placer la configuration d’une telle machine, au fur et à mesure de son développement, dans un espace 2D ou 3D : chaque arête est associée à une force attractive entre les noeuds qu’elle relie, qui tend à les rapprocher, et chaque noeud exerce une force répulsive vers ses voisins proches, pour homogénéiser la distribution des noeuds.
La machine blob est une machine auto-développante particulière, pour laquelle on distingue deux types d’arêtes (verticales et horizontales) et deux types de noeuds (blobs et liens). Les arêtes verticales connectent ensembles tous les noeuds blobs pour former un arbre, et chaque noeud lien est relié à deux noeuds blobs via deux arêtes horizontales ; ils enrichissent cette structure d’arbre.
La machine blob répond à deux objectifs :
Il existe déjà un simulateur en assembleur pour la machine blob, développé en OCAML, gérant tout ce qui concerne la gestion du parallélisme entre blobs, et permettant une programmation modulaire proche d’un langage objet. La contribution proprement dite est de compléter ce simulateur pour réaliser le placement du système de blobs sur une grille 2D de processeurs simulés, au fur et à mesure de son développement. On commencera par supposer un seul processeur, et on mappera le système de blob dans l’espace 2D d’une fenêtre, en utilisant les forces d’attraction et de répulsion déjà citées. Puis on considèrera une grille 2D de processeurs, en donnant la possibilité de varier leur nombre et leur grain. Chaque processeur gère une portion rectangulaire de la fenêtre précédente. Il faut concevoir une version distribuée du placement, et décider pour chaque processeur quels noeuds migrer vers les processeurs voisins. D’autre part, il faut résoudre les problèmes sous-jacents à la représentation distribuée d’un blob ou d’un lien sur plusieurs processeurs, et concevoir un algorithme distribué pour les 7 instructions primitives de la machine blob. On mesurera la performance parallèle sur quelques algorithmes classiques (tri, produit de matrices).