Changes between Version 2 and Version 3 of MjpegCourse/Multipro


Ignore:
Timestamp:
Feb 26, 2008, 4:09:54 AM (16 years ago)
Author:
Nicolas Pouillon
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MjpegCourse/Multipro

    v2 v3  
    3232[[Image(VgmnNoirqMulti.png, align=right)]]
    3333
    34 Cette architecture comportera également un contrôleur de verrous et un contrôleur de terminaux (!MultiTty).
    35 Pour faciliter le debug, le nombre de terminaux contrôlés par le composant !MultiTty sera systématiquement
    36 égal au nombre de processeurs. Pour décrire
    37 cette architecture générique, vous pourrez vous inspirer de l'architecture [MjpegCourse/VgmnNoirqMono VgmnNoirqMono] définie
     34Cette architecture comportera également un contrôleur de terminaux (!MultiTty).
     35
     36Vous pourrez vous inspirer de l'architecture [MjpegCourse/VgmnNoirqMono VgmnNoirqMono] définie
    3837dans le TP2, en n'hésitant pas à utiliser les constructions du langage Python permettant d'exprimer la généricité (tableaux, boucles, etc.).
    3938Cette architecture générique !VgmnNoirqMulti sera décrite dans un fichier DSX séparé, pour faciliter sa réutilisation.
    4039
    41 Pour récupérer la valeur d'un paramètre (par exemple le nombre de processeurs à instancier : ''nproc''),
    42 utilisez la construction:
     40Pour pouvez ajouter des paramètres à la fonction définissant l'architecture. Des valeurs par défaut peuvent être spécifiées.
    4341{{{
    44 self.getParam("nproc")
     42def VgmnNoirqMulti( nproc, nram, icache_nline = 16, icache_nword = 8, dcache_nline = 16, dcache_nword = 8 )
    4543}}}
    46 
    47 Pour instancier le !MultiTty vous aurez besoin de définir une liste de noms de TTYs, ce qui suppose un nombre variable d'arguments.
    48 Vous aurez besoin d'utiliser une fonctionnalité du langage Python: le passage de nombre variable d'arguments issus d'une liste. Supposant que ''nproc'' est une variable contenant le nombre de tty (égal au nombre de processeurs)
    49  * il faudra créer une liste avec les noms des tty:
    50 {{{
    51     noms_ttys = ["tty%d"%i for i in range(nproc)]
    52 }}}
    53  * puis passer cette liste comme une liste d'arguments au constructeur du !MultiTty:
    54 {{{
    55     tty_controller = MultiTty('tty', *noms_ttys)
    56 }}}
    57 Avec `nproc = 3`, ces deux lignes reviennent à:
    58 {{{
    59     tty_controller = MultiTty('tty', "tty0", "tty1", "tty2")
    60 }}}
    61 
    62 Il faudra de plus connecter les ''nproc'' lignes d'interruption du controlleur `MultiTty` à
    63 chacun des port d'interruption IRQ0 des ''nproc'' processeurs. Une boucle suffit:
    64 {{{
    65     for i in range(nproc):
    66         tty_controller.irq[i] // self.processor[i].irq[0]
    67 }}}
    68 
    69 Vous exporterez les membres suivants:
    70  * `processor`: une liste contenant tous les processeurs crées. On accédera au processeur ''n'' par `archi.processor[n]`
    71  * `cram`: une liste contenant tous les segments cachés crées
    72  * `uram`: une liste contenant tous les segments non cachés crées
    73  * `vgmn`: l'interconnect
    74  * `locks`: le composant de verrous matériels
    7544
    7645Vous validerez cette architecture générique !VgmnNoirqMulti, en déployant l'application MJPEG sur
     
    12291
    12392On cherche maintenant à estimer le taux d'utilisation de chacun des 5 processeurs.
    124 
    125 On va utiliser pour cela les informations fournies par l'ordonnanceur de tâches associé à chaque processeur.
    126 Lorsqu'une tâche se bloque (par exemble en attente de données disponibles sur un canal MWMR d'entrée),
    127 l'ordonnanceur essaie de lancer l'exécution d'une autre tâche. Dans un système où chaque processeur
    128 n'exécute qu'une seule tâche, l'ordonnanceur va essayer de relancer l'exécution de la tâche bloquée
    129 un grand nombre de fois, jusqu'à ce que la condition de blocage disparaisse. Le compteur ''idleness''
    130 - affiché par l'ordonnanceur - mesure le nombre total de tentatives de lancement d'une autre tâche.
    131 Une valeur élevée pour ce compteur est donc un bon indicateur que le processeur est faiblement utilisé,
    132 puisque que l'ordonnanceur essaye souvent de passer la main à d'autres tâches.
    133 
    134 [[Image(MjpegCourse:q.gif)]] Q4: Les valeurs des compteurs ''idleness'' sont-elles cohérentes avec les informations
    135 de profilage obtenues sur station de travail?
    13693
    13794[[Image(MjpegCourse:q.gif)]] Q5: Quel est selon vous le processeur le plus chargé ?
     
    204161de commande. Les deux sources C sont ceux des deux derniers TP, éventuellement modifiés.
    205162
    206 Cette archive devra être livrée avant le mardi 27 février 2007, 18h00 à [MailAsim:nipo Nicolas Pouillon]
     163Cette archive devra être livrée avant le mardi 4 mars 2008, 18h00 à [MailAsim:nipo Nicolas Pouillon]
    207164
    208165= Suite =