Changes between Version 4 and Version 5 of Archi3TP1


Ignore:
Timestamp:
Sep 30, 2015, 11:02:51 AM (10 years ago)
Author:
meunier
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi3TP1

    v4 v5  
    1111== 1. Spécification ==
    1212
    13 Dessinez sur une feuille (ou sur un logiciel adapté) les machines d'état du cache L1 write-through à invalidations et du contrôleur mémoire associé, en étant le plus précis possible. On s'intéresse pour ce TP uniquement à la partie données du cache : on suppose en effet que le processeur émet directement des requêtes de lecture et d'écritures, et non les adresses des instructions. De plus, on ne s'intéresse pas aux requêtes à des adresses non cachées : on suppose donc que toutes les requêtes sont à des adresses cachées.
     13Dans cette première partie, il vous est demandé de dessiner sur une feuille (ou sur un logiciel adapté) les machines d'état du cache L1 write-through à invalidations et du contrôleur mémoire associé. La liste des états vous est donnée ci-dessous, il faut donc remplir chaque état avec les actions qui y sont associées et représenter les transitions entre états. Pour représenter les actions, vous pouvez utiliser du français ou du pseudo-code.
     14Liste des états du contrôleur de cache :
     15
     16{{{
     17IDLE,       // Traiter les requêtes en attente, répondre aux lectures qui font hit
     18INVAL,      // Traiter une invalidation reçue
     19MISS,       // Envoi d'un miss
     20SEND_WRITE, // Envoyer l'écriture d'un mot en mémoire et éventuellement mettre le cache à jour
     21MISS_WAIT   // Attendre la réponse à un miss et mettre à jour le cache lors de sa réception
     22}}}
     23
     24Liste des états du contrôleur mémoire :
     25
     26{{{
     27IDLE,       // Traiter les requêtes en attente
     28WRITE_WORD, // Écriture d'un mot
     29READ_LINE,  // Lecture d'une ligne
     30DIR_UPDATE, // Mise à jour du répertoire
     31INVAL,      // Préparation de l'envoi d'une ou plusieurs invalidations
     32INVAL_SEND, // Envoi des invalidations
     33INVAL_WAIT, // Attente des réponses aux invalidations
     34RSP_READ,   // Répondre à une lecture
     35RSP_WRITE   // Répondre à une écriture
     36}}}
     37
    1438
    1539Ce dessin fera partie du rendu, ne le négligez donc pas.
     40
     41On s'intéresse pour ce TP uniquement à la partie données du cache : on suppose en effet que le processeur émet directement des requêtes de lecture et d'écritures, et non les adresses des instructions. De plus, on ne s'intéresse pas aux requêtes non cachées : on suppose donc que toutes les requêtes sont à des adresses cachées.
    1642
    1743
     
    3157
    3258
     59Commencer par regarder les méthodes du cache L1 (CacheL1.java). Pour le protocole write-through, vous aurez a priori besoin d'utiliser uniquement les méthodes `read()`, `write()`, `setLine()` et `inval()`. Pour rester réaliste, il vous est demandé de ne faire qu'un seul accès au cache par cycle, c'est-à-dire d'appeler au plus une fois une de ces méthodes par cycle.
    3360
    34 == 3. Écriture des machines d'état ==
    3561
    36 Une fois les sources du package Model à peu près maitrisées, il faut compléter les classes L1WtiController et !MemWtiController à partir des machines d'état dessinées dans la partie 1.
     62Remarques :
     63 * Les attributs `m_req` et `m_iss_req` du cache contiennent respectivement les dernières requêtes reçues en provenance de la mémoire (requête de cohérence) et du processeur. Ils sont écrits par les méthodes `getRequest()` et `getIssRequest()`, et peuvent donc être lus autant de fois que nécessaire jusqu'à la réception de la requête suivante.
     64 * Les méthodes `getRequest()` et `getIssRequest()` citées au-dessus ne doivent être appelées que lorsqu'il y a une requête présente sur le port correspondant.
     65 * Normalement, il n'est pas nécessaire d'ajouter des variables membre dans les classes des contrôleurs. Si vous souhaitez tout de même en ajouter, mettez clairement en évidence dans votre code ces ajouts (en distiguant leur déclaration des autres) et commentez-les.
     66 * La dernière partie de la méthode `simulate1Cycle` du cache L1 vous est donnée : elle effectue la consommation des réponses qui arrivent sur le port `p_in_rsp`.
     67 * Comme les canaux sont fifos et que des requêtes qui transitent entre un cache et une mémoire ne peuvent pas se doubler, le cache L1 n'est pas obligé de bloquer un miss sur une adresse où il y a une écriture en cours. Ainsi, les réponses aux écritures n'ont pas d'effet spécial dans le cache.
    3768
    38 Pour lancer une simulation, il faut faire un clic droit sur une la classe `Simul.java` du package `simulation`, puis `Run as...` -> `java application`
     69
     70
     71== 3. Écriture des machines d'état et simulation ==
     72
     73Une fois les sources du package `model` à peu près maitrisées, il faut compléter les classes `L1WtiController` et `MemWtiController` à partir des machines d'état dessinées dans la partie 1.
     74
     75Pour lancer une simulation, il faut faire un clic droit sur la classe `Simul.java` du package `simulation`, puis `Run as...` -> `java application`
     76
     77Vous pouvez changer la topcell utilisée dans le fichier `Simul.java`, de même que modifier les fichiers des différentes topcells. En particulier, les processeurs peuvent initialement contenir une liste de requêtes de lecture et d'écriture, qui doit être créée dans la topcell. Si cette liste est vide, il faut ajouter des requêtes interactivement lors de la simulation ; à l'inverse, si cette liste n'est pas vide, les requêtes qui sont ajoutées interactivement lors de la simulation sont placées à la fin de la liste.
     78
     79Remarques :
     80 * Lors de la simulation interactive, les requêtes n'apparaissent que lorsqu'elles ont été consommées. Une requête qui se trouve dans un canal n'est donc pas encore affichée.
     81
    3982
    4083Il faudra bien sûr tester votre code au travers d'entrelacements de requêtes bien choisis. Vous pouvez soit créer ces requêtes dans la classe de la Topcell, soit dynamiquement depuis l'interface en cours de simulation.
     84
     85Si votre protocole est fonctionnel (et seulement dans ce cas), vous pouvez ajouter une instruction `SYNC` qui bloque le processeur tant que toutes les requêtes d'écriture en cours ne sont pas terminées. Vous aurez besoin pour cela d'ajouter un registre dans le contrôleur de cache.
    4186
    4287
     
    4792Le code à rendre l'est sous la forme d'une archive comprenant les 2 fichiers écrits, à envoyer à l'adresse [MailAsim:quentin.meunier Quentin Meunier].
    4893
     94Remarque sur la fraude : toute fraude (entre deux groupes cette année ou vis-à-vis d'un code de l'année dernière) sera sanctionnée par la note de 0.
    4995
    5096