IRILL - Research and Innovation on Free Software
Jussieu, Paris

Applications de calcul parallèle de programmes OCaml avec Spoc/Sarek sur cartes graphiques, comparaison de styles et graphisme

Objectifs

La bibliothèque SPOC [1] d'exécuter à partir d'un programme OCaml des noyaux de calcul sur des cartes graphiques (Graphic Process Unit ou GPU). Cette bibliothèque d'exécution permet de transférer des données d'un programme OCaml sur une carte graphique et de récupérer le résultat de calcul à la demande. Ces noyaux de calcul peuvent être décrits dans le langage compagnon Sarek [1] vu comme une extension de syntaxe d'OCaml. Sarek permet de cibler différentes bibliothèque de programmation de cartes graphiques (Cuda, OpenCL, Vulkan, Metal).

L'ensemble SPOC/Sarek [2] permet de produire du code efficace tournant sur carte graphique appellable dans son programme OCaml.

Récemment le modèle de parallélisme de la distribution OCaml a fortement évolué en introduisant : * les domaines [3], pour lancer un synchroniser un calcul parallèle avec le domaine appelant, * et les effets [4] dont les "handlers" permettent d'exprimer de manière composable des mécanismes de flots de contrôle non locaux.

L'objectif de ce stage est d'enrichir les tests de performance sur des programmes réalistes, en particulier en comparer les styles en multi-coeurs et sur cartes graphiques, y compris à base de squelettes de parallélisme, pour décrire les calculs pour fournir un nouvel ensemble d'applications illustrant ces différences. L'idée est alors de montrer quand il est intéressant de les mixer pour une utilisation optimale du matériel.

Tâches à réaliser

Une première tâche sera la prise en main de l'environnement en testant la chaîne de compilation en fonction du matériel CPU et GPU. La seconde tâche consiste à sélectioner des applications de taille moyenne permettant de comparer les styles de parallélisme obtenus en SPOC/Sarek pour les GPU et avec les Domaines/Effets OCaml sur CPU multicoeur, et la facilité de les paralléliser en fonction du style choisi. Si le temps le permet une troisième tâche serait d'explorer le rendu graphique parallèle d'une application graphique, c'est-à-dire utiliser un GPU d'une part pour calculer et d'autre part pour afficher le rendu, cela en s'interfaçant avec au moins une bibliothèque de rendu et en passant par l'interface OCaml-C [5, 6].

Prérequis

  • avoir des bases de programmation en C et en OCaml
  • la connaissance de la programmation GPU est un plus

Références

  1. Mathias Bourgoin. "Abstractions Performantes pour Cartes Graphiques". Thèse de doctorat de l'université Pierre et Marie Curie (P6), 2013.

  2. Site Spoc & Sarek : https://mathiasbourgoin.github.io/Sarek/

  3. parallélisme en OCaml (domaines) : https://ocaml.org/manual/5.2/parallelism.html

  4. effets en OCaml : https://ocaml.org/manual/5.2/effects.html

  5. interface avec C : https://ocaml.org/manual/5.4/intfc.html

  6. Emmanuel Chailloux, Pascal Manoury, Bruno Pagago. "Développement d'Applications en OCaml". chapitre "Interopérabilité avec C". O'Reilly. 2000. https://chaillou.perso.lip6.fr/Public/DA-OCAML/book-ora113.html

Le stagiaire devra être d'accord pour que ses contributions soient distribuées sous licence libre.

Contacts : Emmanuel Chailloux & Mathias Bourgoin