Structures de données 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 structures de données efficaces en programmaiton parallèle 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 structures de données (arbres, graphes, GNN, ...) et les opérateurs qui les manipulent en circuits Eclat ou en structureis OCaml (via l'approche hybride bytecode tournant sur la VM et circuits spécialisés)i. Il sera intéressant pour ces structures d'avoir une estimation statique du nombre de cycles nécessaires pour les algorithmes les manipulant.i Cette analyse statique peut être effectuée en modificant le système de types d'Eclat.
Il sera ensuite possible de mixer les deux tâches en construisant une application gérant l'interaction tout en poursuivant le calcul d'un algorithme non trivial, utilisant ces structures de données.
Prérequis
- avoir des bases de programmation en C et en OCaml
- la connaissance de la programmation FPGA est un plus
Références
- Jocelyn. Sérot. La programmation des circuits FPGA et le langage VHDL. Une introduction pour les programmeurs et par l’exemple. Ellipse, 2019.
- L. Sylvestre, E. Chailloux, J. Sérot : “Work-in-Progress: mixing computation and interaction on FPGA”, International Conference on Embedded Software (EMSOFT), 2023.
- L. Sylvestre, J. Sérot, E. Chailloux : “Hardware Implementation of OCaml Using a Synchronous Functional Language”, Practical Aspects of Declarative Languages (PADL), 2024.
- https://en.wikipedia.org/wiki/Graph_neural_network
- https://distill.pub/2021/gnn-intro/
Le stagiaire devra être d'accord pour que ses contributions soient distribuées sous licence libre.
Contacts : Emmanuel Chailloux & Loïc Sylvestre