Le choix de votre intergiciel
Les différents choix ont été regroupés en grande famille. Les intergiciels choisis ici sont facilement installables dans G5K. Vous pouvez proposer d'autres intergiciels, mais ce sera à vous de vérifier que tout fonctionne dans G5K.
Chaque équipe devra choisir un intergiciel différent.
Variantes autour de MPI + threads géré par un autre runtime
Dans ces variantes le support multi-threads et le support des réseaux rapides sont obligatoires. Cela implique que vous ne pouvez pas utiliser NFS pour les transferts de fichiers (réseau lent).
- MPI + C + OpenMP
- MPI + C++ + TBB
- MPI (Boost) + C++20 pour les threads (promise/async)
Bibliothèques de très haut-niveaux
- Charm++ (Bibliothèque C++)
- Python celery, IPythonParallel
- DRb Ruby
- async_parallel ou distributed OCaml;
- Hadoop, le Map-Reduce de Apache (installation difficile)
- Apache Spark, Beam, Fink, etc. (Analyse de données, Scala/Java/Python/R)
Les languages incluant un support pour les systèmes distribués
- Julia http://julialang.org, syntaxe superficiellement similaire à Python, sans le côté "object";
- Elixir (http://elixir-lang.org), langage moderne, fondé sur le runtime d'Erlang;
- Erlang (http://erlang.org);
- Scala(http://scala-lang.org);
- Chapel(http://chapel.cray.com), plus confidentiel mais avec une approche globale;
- X10 (http://x10-lang.org), encore plus confidentiel;
- Cloud Haskell.
Les objets distribués
- RMI avec Java ou Clojure;
- DO de Objective-C (Gnustep);
- Distributed ADA (polyorb), l'ex-premier langage de l'Ensimag;
- Python + Pyro;
- RPC Go (dans la bib. standard, http://golang.org);
- Apache Thrift (facebook) + Perl, Go, D ou Haskell;
- Rust + Tonic (gRPC)
- Raku + Cro
Divers
- Zero-MQ (bibliothèque de socket de haut niveaux (ex: diffusion, bus, ...))
- nanomsg (fille de zero-mq, plus simple, pour C)
- Simgrid (simulation) (il faudra mesurer et simuler les clusters de g5k)
- socket de bases en D ou en C++. Il faudra gérer beaucoup de choses à la main.