Contributions à AUGH

De Ensiwiki
Aller à : navigation, rechercher

Pour ces sujets, il est possible de bénéficier d'un encadrement spécifique sur le thème des méthodes agiles. Pour plus de détails, voir la page Méthodes agiles en projet de spécialité.

Cadre du projet

  • Encadrant : Olivier Muller.
  • Nombre d'étudiants : 2 à 5 étudiants par contribution
  • Prérequis : programmation C, GL

Contexte

AUGH est un outil open-source, qui permet à un informaticien non expert en matériel de générer automatiquement des accélérateurs matériels sur FPGA (circuit reprogrammable). D'une certaine manière, AUGH peut être vu comme un compilateur, qui prend en entrée une application décrite en C pour en générer une description VHDL compatible avec le FPGA ciblé. Dans le cadre du projet de spécialité, nous vous proposons d'intervenir sur les contributions suivantes

Contribution "parser Clang"

Cette contribution a pour objectif de remplacer l'actuel parser du logiciel AUGH par le parser Clang.

Pour des raisons historiques, le parsing de AUGH est réalisé à travers plusieurs outils et bibliothèques. Pour être converti dans la représentation intermédiaire de AUGH, représentation nommée “Hier” en référence au fait qu'elle conserve la notion de hiérarchie du code (corps des boucles, blocs conditionnés etc), le C de l'application passe actuellement par le parser d'une très vieille version de GCC (modifié depuis un point inconnu et de manière inconnue). Les graphes CTree obtenus sont convertis par la bibliothèque Alliance dans une structure plus adaptée pour l'ancêtre de AUGH. AUGH s'appuie actuellement sur ces stuctures nommées VPN (pour Virtuel Process Network) pour obtenir sa représentation intermédiaire. Au total, on a donc 2 conversions de représentations internes (CTree → VPN → Hier).

On vous propose donc nettoyer tout ça, utiliser le parser CLang en tant que bibliothèque liée dynamiquement, et faire ceci : CLang → Hier. Cela permettra également de retirer une masse considérable d'ancien code du projet AUGH.

  • Prérequis spécifique à ce sujet : connaissances de base en compilation, comprendre le C++

Travail demandé

  • Prendre en main AUGH via les tuto dans le dépôt.
  • Comprendre en particulier l'organisation de sa représentation intermédiaire.
  • Comprendre les API de Clang et la représentation intermédiaire.
  • Créer un plugin AUGH (à partir d'exemples documentés) intégrant progressivement les éléments du parsing

Contribution "algorithmes d'explorations"

Pour générer un circuit numérique ajusté à un FPGA donné, AUGH s'appuie en interne sur un processus d'exploration des solutions possibles, qui recherche le circuit le plus rapide capable de rentrer dans le FPGA ciblé (contraintes en ressources matérielles).

Le processus d'exploration existant a été conçu pour être très rapide, ce qui se fait parfois au détriment de la performance/rapidité des circuits générés. Il utilise un algorithme de type glouton : des transformations sont appliquées successivement à une version initiale du circuit, de façon à réduire progressivement le temps d'exécution du circuit. Et cet algorithme ne revient jamais en arrière pour voir si des transformations différentes auraient pu mener à de meilleures solutions.

Le but de cette contribution est d'implémenter d'autres algorithmes d'exploration des solutions et d'évaluer leurs avantages et inconvénients (rapidité des circuits générés, complexité algorithmique, etc). Pour fixer les idées, on vous propose de partir sur un algorithme de backtrack partiel et on vous laisse libre d'en trouver d'autres. Vos cours de RO, la littérature et discussions potentielles avec les collègues de RO peuvent éclairer sur d'autres propositions.

  • Prérequis spécifique à ce sujet : connaissances de base en RO

Travail demandé

  • Spécifier les algorithmes d'exploration à implanter
  • Etudier l'implantation de la stratégie d'exploration actuelle (utilisation de l'API)
  • Créer un plugin AUGH (à partir d'exemples documentés) intégrant les algorithmes d'exploration
  • Analyser/Comparer les résultats