CRAC (Communication Routines for Asynchronous Computation) est un environnement de programmation/exécution distribué pour le calcul itératif asynchrone. Ses principes de bases sont les mêmes que Jace avec quelques fonctionnalités en plus/moins et surtout un codage en C++. J'ai commencé son développement début 2005 et les premiers tests sur des applications existantes ont pu être menés au premier semestre 2006. Depuis, CRAC est en phase de débogage et j'ajoute des fonctionnalités au fur et à mesure des tests applicatifs.
Les principales caractéristiques de CRAC sont les suivantes :
- il est totalement écrit en C++, donc plus performant de Jace mais pas pleinement portable,
- il a la même interface de programmation et la même sémantique des communications que Jace,
- il permet de créer une machine parallèle virtuelle distribuée et de lancer une application à partir d'une description XML des machines et des tâches à lancer,
- les machines sont organisées hiérarchiquement par "sites": un maître et des esclaves sur chaque site plus un super-maître qui chapeaute le tout,
- pour limiter l'utilisation de la bande passante entre les sites, les opérations globales (lancement des tâches, diffusion de données, détection de convergence, ...) utilisent cette hiérarchie,
- les machines d'un site avec des adresses privées peuvent être atteintes de manière transparente en désignant une machine relais dans le site,
- l'organisation et le fonctionnement du démon (création de tâches, thread d'envoi/réception, gestion des communications) sont pratiquement les mêmes que pour Jace.
Au niveau résultats, la dernière application testée avec CRAC avait déjà été implémentée en C avec MPICH-Madeleine. Sur un cluster local, on a constaté un écart de performance inférieur à 1% entre les deux versions. Le surcoût de CRAC est donc négligeable. D'autres tests ont eu lieu sur le réseau Grid'5000, avec 120 machines réparties sur 4 sites. La description de CRAC ainsi que les résultats de ces expériences sont présentés dans l'article [ 1 ].