12.07.2015 Views

Solution Quiz automne 2009 - Moodle - École Polytechnique de ...

Solution Quiz automne 2009 - Moodle - École Polytechnique de ...

Solution Quiz automne 2009 - Moodle - École Polytechnique de ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

INF8500 - Intra - Automne <strong>2009</strong>Question 1 (4 points)SystemC et raffinement <strong>de</strong>s communicationsa) (.5 pt) Pourquoi est-il toujours préférable, lorsque cela est possible, d’utiliser leSC_METHOD plutôt que le SC_THREAD ou même le SC_CTHREAD ?C’est d’abord et avant tout une question <strong>de</strong> performance (vitesse d’exécution). En effet unSC_METHOD c’est comme une fonction C/C++ alors qu’un SC_THREAD ouSC_CTHREAD c’est implémenté à partir d’une librairie <strong>de</strong> thread POSIX (Linux) ou encoreFIBERS pour Windows. Or à cause <strong>de</strong> son implémentation dans le noyau du OS, le threa<strong>de</strong>st beaucoup moins rapi<strong>de</strong> que la fonction en temps d’exécution.b) (.5 pt) Pour quel type <strong>de</strong> lecture n’a-t-on pas le choix que d’utiliser le SC_THREAD ?Expliquez.Lecture bloquantec) (1 pt) Quelle(s) différence(s) existe-t-il entre les 2 modèles suivants (Fig. 1.1) du point <strong>de</strong>vue comportement ? Expliquez.#inclu<strong>de</strong> "systemc.h"SC_MODULE (co<strong>de</strong>1) {sc_in data, clk, reset ;sc_out q;};bool q_l ;void tff () {if (reset.read()) {q_l = 0;} else if (data.read()) {q_l = !q_l;}q.write(q_l);}SC_CTOR(co<strong>de</strong>1) {SC_METHOD (tff);sensitive


INF8500 - Intra - Automne <strong>2009</strong>d) (2 pts) Soit le raffinement <strong>de</strong>s communications en SystemC BCA obtenu pour l’applicationJPEG illustrée à la figure 1.2 (page suivante).d.1) (1 pt) Complétez la fonction Requete_Acceptee du co<strong>de</strong> <strong>de</strong>s pages 3 et 4. Complétezdans votre cahier <strong>de</strong> réponse.Voir page 4d.2) (1 pt) À la figure 1.2, on suppose qu’on a une version TF <strong>de</strong> m_iquant et une inversionTF <strong>de</strong> m_table. Quelle(s) modification(s) <strong>de</strong>vrait-on apporter aux adaptateurs AdaptQ etAdaptT afin <strong>de</strong> supporter une version TF <strong>de</strong> m_iquant et une inversion RTL (CA) <strong>de</strong>m_table. Donnez les gran<strong>de</strong>s lignes <strong>de</strong> ces modifications.La métho<strong>de</strong> AdapQ reste inchangée alors qu’il faut raffiner la métho<strong>de</strong> AdapT au niveauRTL. Ce raffinement implique <strong>de</strong> définir une version cycle accurate sous forme d’unemachine à états (tel que présenté dans le cours).Page 2 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>#inclu<strong>de</strong> "systemc.h"//#############################Interface Maison#######################################class quant_vers_table_if : virtual public sc_interface{public:// du côté du quantificateur inversevirtual void Deman<strong>de</strong>_Requete(int Sel, int Ind) =0;virtual int Lire_Coefficient() = 0;};class table_vers_quant_if : virtual public sc_interface{public:// du côté <strong>de</strong> la table <strong>de</strong>s valeurs précalculéesvirtual void Requete_Acceptee(int *Sel, int *Ind) = 0;virtual void Envoie_Coefficient(int Coeff) = 0;};class adaptQ: public sc_channel, public quant_vers_table_if{public:sc_in clk;sc_out req;sc_in ack;sc_inout data;// constructeurSC_CTOR(adaptQ) {}void init () {req.write(false); // Tous les signaux <strong>de</strong> contrôle sont initialisés à 0// afin d'assurer un blocage au démarrage}void Deman<strong>de</strong>_Requete(int Sel, int Ind) {//envoie du sélecteurdo {wait(clk ->posedge_event());} while (!ack.read());data.write(Sel);req.write(true);wait(clk->posedge_event());req.write(false);}//envoie <strong>de</strong> l'in<strong>de</strong>xdo {wait(clk->posedge_event());} while (!ack.read());data.write(Ind);req.write(true);wait(clk->posedge_event());req.write(false);int Lire_Coefficient() {req.write(true);do {wait(clk->posedge_event());} while (not ack.read());Page 4 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>};};req.write(false);return(data.read());class adaptT: public sc_module, public table_vers_quant_if{public:sc_in clk;sc_out req;sc_in ack;sc_inout data;// constructeurSC_CTOR(adaptT) {}void init () {req.write(false); // Tous les signaux <strong>de</strong> contrôle sont initialisés à 0}void Requete_Acceptee (int *Ind, int *Sel) {//On lit le sélecteur et sa valeur est retournée à la tablereq.write(true); // On est prêt à recevoirdo { //On attend le signal <strong>de</strong> m_iquant pour démarrerwait(clk->posedge_event());} while (!ack.read());*Sel = data.read();req.write(false); // La lecture <strong>de</strong> Sel est complétéewait(clk->posedge_event());//On lit l'in<strong>de</strong>x et sa valeur est retournée à la tablereq.write(true); // On est à nouveau prêt à recevoirdo { //On attend le signal <strong>de</strong> m_iquant pour redémarrerwait(clk->posedge_event());} while (!ack.read());*Ind = data.read();}req.write(false); // La lecture <strong>de</strong> Ind est complétée};void Envoie_Coefficient (int Coeff) {do {wait(clk->posedge_event());} while (not ack.read());data.write(Coeff);req.write(true);wait(clk->posedge_event());req.write(false);}Page 5 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>Question 2 (6 points) Algorithmes d’ordonnancement pour le matérielyxzr+n1cn5 * -n2asn6+*n3bqn7**n4n9-+n8s o rFigure 2.1a) (3 pts) Appliquez l’algorithme du list scheduling sur le DFG <strong>de</strong> la figure 2.1 avec lescontraintes <strong>de</strong> ressource suivantes: <strong>de</strong>ux unités arithmétiques et un multiplieur. Chaque typed’opération <strong>de</strong>man<strong>de</strong> 1 cycle. Vous <strong>de</strong>vez :a.1) Faire le ASAP et le ALAP pour les besoins du problème;a.2) Donner la mobilité <strong>de</strong>s nœuds;a.3) En vous servant du résultat <strong>de</strong> cette mobilité, appliquer l’algorithme du listscheduling. Utilisez une Plist par opérateur et en cas d’égalité, utilisez l’ordretopologique. Expliquez clairement votre démarche.Page 6 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>a.1)ASAPALAPa.2)Mobilité :n1 n2 n3 n4 n5 n6 n70 0 0 0 0 0 0a.3) Nous avons <strong>de</strong>ux additionneurs/soustracteurs et un multiplieur :Cycle 1 :Plist x = {n5}Plist +/- = {n1}On choisi n1 et n5Cycle 4 :Plist x = {n4 et n7}Plist +/- = {n8}On choisi n7 et n8 et lamobilité <strong>de</strong> n4 passe à -1.Cycle 2 :Plist x = {}Plist +/- = {n2 et n6}On choisi n2 et n6Cycle 5 :Plist x = {n4}Plist +/- = {n9}On choisi n4 et n9Cycle 3 :Plist x = {n3 et n7}Plist +/- = {}On choisi n3 et la mobilité <strong>de</strong>n7 passe à -1.On obtient graphiquement :Page 7 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>n5x +n1n6+-n2xn3n7xn8+xn4n9-b) (3 pts) On vous <strong>de</strong>man<strong>de</strong> d’appliquer l’algorithme force directed sur le DFG <strong>de</strong> la figure 2.1en 5 étapes <strong>de</strong> contrôle avec une unité arithmétique et un multiplieur. Pour cela vous <strong>de</strong>vez :b.1) Faire le ASAP et le ALAP pour les besoins du problème;b.2) Donner la mobilité <strong>de</strong>s nœuds;b.3) Calculer Fcost k,j où k est une étape <strong>de</strong> contrôle et j un opérateur. Faites aussi leschéma <strong>de</strong> distribution;b.4) En vous servant du résultat <strong>de</strong> cette mobilité, appliquez l’algorithme du forcedirected sur le nœud n1 et n8 en utilisant les forces directes et indirectes. Expliquezclairement votre démarche. Parmi n1 et n8, lequel <strong>de</strong>s <strong>de</strong>ux nœuds <strong>de</strong>vrait êtrechoisi? Selon ce choix, mettez Fcost k,j à jour et refaites un schéma <strong>de</strong> distribution.Page 8 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>b.1) On a un maximum <strong>de</strong> 5 cycles :b.2)Mobilité :n1 n2 n3 n4 n5 n6 n71 1 1 1 1 1 1b.3)D’abord Pi,jPage 9 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>Calculons F cost k,jF cost 1,+/- = ½F cost 2,+/- = ½ + ½ + ½ = 1.5F cost 3,+/- = ½ + ½ = 1F cost 4,+/- = ½ + ½ = 1F cost 5,+/- = ½ + ½ = 1F cost 1,* = ½F cost 2,* = ½F cost 3,* = ½ + ½ = 1F cost 4,* = ½ + ½ + ½ = 1.5F cost 5,* = ½b.4)Appliquons l’algorithme en utilisant les forces directes et indirectes :où i, est le numéro du nœud traité, k est l’étape <strong>de</strong> contrôle et j le type <strong>de</strong> ressourcesTotal-Force 1,+/-, 1 = Force 1,+/-, 1 = ½ - (1/2 + 3/2)/2 = -1/2Total-Force 1,+/-, 2 = Force 1,+/-, 2 +Force 2,+/-, 3 + Force 3,*, 4 + Force 4,*, 5 +Force 6,+/-, 3 + Force 7,*, 4 + Force 8,+/-, 5 + Force 9,+/-, 5// Forces directes// Forces indirectes// Forces indirectesTotal-Force 8,+/-, 5 = Force 8,+/-, 5 = 1 - (1 + 1)/2 = 0Total-Force 1,+/-, 2 = Force 8,+/-, 5 +Force 6,+/-, 2 + Force 3,*, 3 + Force 2,*, 2 +Force 1,+/-, 1 + Force 5,*, 1// Forces directes// Forces indirectes// Forces indirectesP.S. Comme personne ne c’est rendu la et que j’ai annulé cette partie, je n’ai pas développer leforces indirectes. Je vous laisse le faire en exercices…Pour une solution complète voir le no 3 <strong>de</strong>s exercicesPage 10 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>Question 3 (3 points) Estimateurs logicielsSoit le DFG <strong>de</strong> la figure 3.1 :yxzr+n1cn5 * -n2asn6+*n3bqn7**n4n9-+n8s o rFigure 3.1Considérez d’abord que le délai pour le multiplieur est <strong>de</strong> 2 cycles alors que celui <strong>de</strong> l’unitéarithmétique et logique est <strong>de</strong> 1 cycle. Ensuite, soit les contraintes temporelles (<strong>de</strong> l’usager)suivantes :1 L’opération n4 démarre au moins 6 cycles après le démarrage <strong>de</strong> n2;2 L’opération n7 démarre au plus 2 cycles après que l’opération n1 soit démarrée.a) (2 pts) Sans appliquer l’algorithme <strong>de</strong> linéarisation étape par étape, donnez un résultat <strong>de</strong>linéarisation possible qui minimiserait le temps d’exécution sur un processeur embarquéayant une seule unité <strong>de</strong> calcul multifonctionnel (+, - et *) tout en tenant compte <strong>de</strong>scontraintes temporelles <strong>de</strong> l’usager. Sur votre graphe d’ordonnancement, donnez pourchaque nœud l’étape <strong>de</strong> contrôle où il sera cédulé.b) (1 pt) En tolérant un spill set maximal <strong>de</strong> 1, indiquez quel serait le nombre minimal <strong>de</strong>registres requis sur le processeur selon votre résultat <strong>de</strong> linéarisation.Page 11 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>a)*n5+n1+n6*n7-n2-n9*n3+n8*n4-26Cycle 1 cycle3 cycle 4 cycle5 cycle 7 cycle 8 cycle 9 cycle 11 cycle 13En sachant qu’entre n1 et n7 on a 2 cycles (addition) la contrainte 2) est respectée. D’autre part,entre n2 et n4 je dois avoir au moins 6 cycles. Il faut donc que je cédule n4 au cycle 13. Il y adonc 2 cycles inutilisés.b)J’ai besoin au maximum <strong>de</strong> 5 registres (voir entre n2 et n9). Pour obtenir un spill set <strong>de</strong> 1 il fautdonc 4 registres. Notez qu’ici je n’ai pas considéré l’allocation <strong>de</strong> registres pour lesentrées/sorties mais j’aurais pu le faire. Quel serait alors les changements?Page 12 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>Question 4 (3 points) Estimateurs matérielsS1S2V1V2V3*V10V4+V5V11+V6V12-V7 V8 V9S3V13V14+V15*V16S4*V17V18V19S5-*V20V21S6Figure 4.1a) (1.5 pt) À partir <strong>de</strong> la figure 4.1, faites le tableau du temps <strong>de</strong> vie <strong>de</strong>s variables (v1 à v21).(Suggestion : Utilisez un mo<strong>de</strong> paysage).b) (1.5 pt) Dans le cours, nous avons vu le tableau <strong>de</strong> la Figure 4.2 (page suivante) pour letemps <strong>de</strong> vie <strong>de</strong>s interconnexions. Sachant que les interconnexions A à H sont lesinterconnexions d’entrée, déterminez le nombre <strong>de</strong> bus requis en entrée pour le coprocesseurqui calcule la racine carrée. Utilisez une approche par clique ou par coloration <strong>de</strong> graphe.Expliquez clairement votre démarche.Page 13 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>a)S1 S2 S3 S4 S5 S6V1 X X X X XV2 X X X XV3 XV4 XV5 XV6 XV7 X XV8 X X XV9 X X X X XV10 X XV11 X XV12 X XV13 X X XV14 X XV15 X XV16 X XV17 X XV18 X X X XV19 X X XV20XV21XPage 14 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>b)En gras on a les partages possibles sur <strong>de</strong>ux bus (cliques) et en pointillés on a les conflitspossibles.Le minimum <strong>de</strong> clique est <strong>de</strong> 2, ce qui fait 2 bus seulement. Mais il faut alors unmultiplexeur (D et E) à l’entrée droite du 2 e unité arithmétique et logique.En effet, même si sur le tableau il y a un recouvrement entre C et D à l’étape <strong>de</strong> contrôles2, ce n’est pas véritablement un conflit car les 2 opérations (qui s’exécutent enparallèle) utilisent les mêmes valeurs d’entrées.Évi<strong>de</strong>mment, j’ai accepté <strong>de</strong>s cliques <strong>de</strong> 3 et même <strong>de</strong> 4 (si pas <strong>de</strong> MUX).Page 15 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>S0 S1 S2 S3 S4 S5 S6 S7AxB x xC x x xD x xExF x x x xGxHxI x x xJ x x x xKxLxM xN xFigure 4.2Page 16 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>Question 5 (4 points) Synthèse ESL avec Cynthesizer (labo 1)Considérez un module SystemC avec les ports d’entrée in et valid_in, les ports <strong>de</strong> sortie out etvalid_out, et dont la fonctionnalité (son SC_CTHREAD) est donnée par le bout <strong>de</strong> co<strong>de</strong> ci<strong>de</strong>ssous:1: int i;2: unsigned int in_data [256];3: unsigned int out_data[256];4:5: while(1) {6:7: while(valid_in.read() == false) {8:9: }10:11: for(i=0;i


INF8500 - Intra - Automne <strong>2009</strong>a) Ajouter wait(1); à la ligne 8, après la ligne 12 et après la ligne 23.b) Envelopper le bloc <strong>de</strong> lecture (lignes 7 à 13) et le bloc d’écriture (lignes 21 à 25) chacun dansun bloc CYN_PROTOCOL.c) Remplacer unsigned int par sc_uint ou unsigned char aux lignes 2 et 3.(L’algorithme utilise seulement les 8 bits <strong>de</strong> poids faible <strong>de</strong> in_data à la ligne 17)d) Utiliser une directive CYN_LATENCY pour l’ensemble <strong>de</strong> cette boucle. Elle peut être exécutéeen moins <strong>de</strong> 256 cycles si elle est déroulée et si les tableaux in_data et out_data sontimplémentés en registres (et non en mémoire RAM).Page 18 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>AnnexeConcernant le list scheduling :Concernant le Force Directed :Page 19 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>Concernant la linéarisation :Page 20 <strong>de</strong> 21


INF8500 - Intra - Automne <strong>2009</strong>Concernant l’algorithme <strong>de</strong> la racine carrée :UF1 = [abs(a),max]UF2 = [abs(b),min,+,-]UF3 = [>> 1]UF4 = [>> 3]R1 = [a,t1,x,t7]R2 = [b,t2,y,t3,t5,t6]R3 = [t4]Sources et<strong>de</strong>stinations <strong>de</strong>sconnexionsa)b)Page 21 <strong>de</strong> 21


Page 22 <strong>de</strong> 21INF8500 - Intra - Automne <strong>2009</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!