Génération de simulateurs de jeux d’instructions compilés Ronan AMICEL IRISA / Equipe CAPS
Motivation zOffrir un outil permettant : yle choix des paramètres principaux d’un processeur xjeu d’instructions, xtaille des caches, etc. yla validation d’un compilateur yl'écriture et la validation des applications
Approche zProgrammes assembleur en entrée y pas de codage binaire à définir zSimulation compilée y hautes performances y permettre des benchmarks conséquents
Vue d’ensemble Source CAssembleur TriMedia tmcc Binaire TriMedia générateur tmsim tmas gcc/ld Source C++ simulateur compilé Description de l’architecture
zDescription SALTO ysyntaxe assembleur ytables de réservation zIl faut la sémantique des instructions yeffet sur les registres et la mémoire yeffet sur le flot de contrôle
Description de la sémantique zExemple 1 modulo add : iadd r,s -> d sémantique : $3=add($1,$2) zExemple 2 load 2 bytes : uld16r r,s -> d sém. : $3=zx(mem(add($1,$2),2),32)
Simulation compilée zGénération du code C/C++ à partir du source assembleur zSpécialisation par rapport au code d ’une application yélimine le surcoût de l’interprétation zPossibilités d’optimisations statiques
Optimisation du code généré (1/2) zDifférent de l’optimisation du code simulé zSémantique : simplification de la représentation intermédiaire xévaluation partielle des opérateurs : r1-> r8 = addsu( 255, r4 ); r8 = 255; xsuppression du code inutile : r6 = 0; r6 = r12; r6 = r12;
Optimisation du code généré (2/2) zNombre de cycles nécessaires ycalcul statique au niveau du bloc de base zUsage des ressources ynon implémenté
Etat d’avancement zDescription de l’architecture TriMedia zPrototype de générateur ysimulation fonctionnelle ycalcul du nombre de cycles yperformances
Performances