IRILL - Research and Innovation on Free Software
IRILL, Paris

Squelettes de parallélisme en Eclat et applications sur FPGA

Objectif

Les FPGA ([1] field-programmable gate arrays) sont des circuits numériques configurables par logiciel pour implémenter des calculs sur-mesure. Ces circuits sont particulièrement appréciés pour la spécialisation et la parallélisation de certaines tâches.

La programmation de FPGA se fait habituellement dans un langage de description de matériel comme VHDL ou Verilog qui sont assez éloignés des langages algorithmiques. Pour une programmation de plus haut niveau, on développe le langage Eclat [2] qui permet de mixer calculs et interactions sur FPGA.

Un programme Eclat est traduit t en VHDL puis synthétisé sur des cartes FPGA Orange-Crab (resp. DE-10 Lite) via l’environnement yosis-npr (resp. Quartus d’Intel). Pour montrer l’expressivité d’Eclat, la machine virtuelle d’OCaml a été décrite avec Eclat [3] ce qui permet d’avoir la VM OCaml sous forme d’un circuit FPGA, permettant ainsi d’exécuter des programmes OCaml, compilé en byte-code, directement sur le circuit.

L'objectif de ce stage est de définir des squelettes de parallélisme composables soit directement en Eclat, soit en suivant cette méthode hybride (bytecode OCaml sur la VM utilisant des circuits spécialisés) pour ensuite construire des applications mixant les différents paradigmes de programmation que propose Eclat.

Tâches à réaliser

Une première tâche sera de tester les différentes chaînes de compilation d'Eclat (chaîne libre de la plateforme OrangeCrab, chaîne Intel sur la carte DE-Lite 10) en particulier sur l'utilisation des "blcos ram" pour les tableaux en et testant la communication avec les périphériques externes (bouttons poussoirs, led, ...). On pourra s'intéresser à d'autres plateformes (Xylinx, Basys, ...).

Les tâches suivantes consistent :

  • d'une part à spécificier des applications interactives avec calculs longs illustrant l'expressivité, la sûreté et l'efficacité du langage Eclat, puis à les implanter.
  • d'autre part à définir et à implanter des squelettes de parallélisme (map, reduce, pipe, ...) en circuits manipulant des tableaux Eclat et des tableaux OCaml (ou autres structures de données régulières). Il sera intéressant pour ces squelettes d'avoir une estimation statique du nombre de cycles nécessaires en fonction des arguments.

Il sera ensuite possible de mixer les deux tâches en construisant une application géranti l'interaction tout en poursuivant le calcul d'un algorithme non trivial, utilisant ces squelettes de parallélisme.

Prérequis

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

Références

  1. Jocelyn. Sérot. La programmation des circuits FPGA et le langage VHDL. Une introduction pour les programmeurs et par l’exemple. Ellipse, 2019.
  2. L. Sylvestre, E. Chailloux, J. Sérot : “Work-in-Progress: mixing computation and interaction on FPGA”, International Conference on Embedded Software (EMSOFT), 2023.
  3. L. Sylvestre, J. Sérot, E. Chailloux : “Hardware Implementation of OCaml Using a Synchronous Functional Language”, Practical Aspects of Declarative Languages (PADL), 2024.
  4. J. Darlington, Y-K. Guo, H. Wing To, and J. Yang. 1995. Parallel skeletons for structured composition. SIGPLAN Not. 30, 8 (Aug. 1995), 19–28.
  5. OCamlp3L : http://camlp3l.inria.fr/eng.htm

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

Contacts : Emmanuel Chailloux & Loïc Sylvestre