wiki:TP3_Multipro

TP3 : Déploiement de l'application MJPEG sur une architecture multiprocesseur

TP Précédent : TP2_Monopro

0. Objectif

Comme pour les précédents TP, vous aurez à fournir un certain nombre de sources et un rapport. Il vous est conseillé de parcourir la documentation dans le trac, en partant de dsx:wiki:WikiStart.

La première partie de ce TP vise la description d'une architecture matérielle multiprocesseurs générique, appelée VgmnNoirqMulti. Cette architecture est générique dans le sens où on peut faire varier par un simple paramètre le nombre de processeurs et le nombre de bancs mémoire, ainsi que les caractéristiques des caches rattachés aux processeurs.

La seconde partie de ce TP vise à déployer l'application MJPEG sur cette plateforme générique en faisant varier les paramètres dont on dispose. Cette exploration architecturale est le but réel de l'outil DSX.

1. Description de l'architecture générique VgmnNoirqMulti

L'architecture VgmnNoirqMono utilisée dans le TP2 était une architecture mono-processeur non-paramètrable.

On se propose de décrire maintenant avec DSX une architecture multiprocesseur générique (illustrée ci-contre), dont les paramètres sont :

  • Le nombre de processeurs : proc_count
  • Le nombre de bancs mémoire : ram_count
  • Le nombre de lignes des caches : icache_lines et dcache_lines
  • Le nombre de mots par ligne des caches : icache_words et dcache_words

Cette architecture comportera également un contrôleur de terminaux (MultiTty).

Vous pourrez vous inspirer de l'architecture VgmnNoirqMono définie dans le TP2, en n'hésitant pas à utiliser les constructions du langage Python permettant d'exprimer la généricité (tableaux, boucles, etc.) Cette architecture générique VgmnNoirqMulti sera décrite dans un fichier DSX séparé, pour faciliter sa réutilisation.

Vous pouvez ajouter des paramètres à la fonction définissant l'architecture, auxquels des valeurs par défaut peuvent être spécifiées. Par exemple :

def VgmnNoirqMulti( proc_count, ram_count, icache_lines = 16, icache_words = 8,
                    dcache_lines = 16, dcache_words = 8 )

Vous validerez cette architecture générique VgmnNoirqMulti, en déployant l'application MJPEG sur une instance particulière de cette architecture, équivalente à celle utilisée dans le TP2 : c'est à dire un seul processeur et deux bancs mémoire. Pour l'architecture matérielle, vous spécifierez des caches processeurs de 16 lignes de 8 mots, et pour la partie logicielle, vous utiliserez le système d'exploitation embarqué Mutek/S.

Vous instancierez l'architecture avec la ligne (les paramètres non spécifiés prennent leurs valeurs par défaut) :

archi = VgmnNoirqMulti( proc_count = 1, ram_count = 2 )
  • Question 1 : Combien faut-il de cycles pour décompresser 25 images?

2. Exploration Architecturale

Dans cette seconde partie, on va déployer l'application MJPEG sur l'architecture MPSoC VgmnNoirqMulti. Vous ferez principalement varier le nombre de processeurs et la répartition des tâches logicielles sur les processeurs. Les deux tâches d'entrée/sortie tg et ramdac restent pour le moment implantées sur des coprocesseurs matériels spécialisés : il y a donc 5 tâches "logicielles" à déployer sur un nombre de processeurs qui reste à déterminer.

2.1 Profilage de l'application

Pour guider la répartition des tâches sur les processeurs, on commence par effectuer un profilage de l'application sur station de travail POSIX, en mesurant les temps passés dans les différentes tâches.

Ce profilage nous donne, comme charge relative entre les tâches, les valeurs suivantes :

idct 35%
vld 25%
demux 20%
iqzz 16%
libu 4%
  • Question 2 : Qu'en déduisez-vous sur les façons optimales de déployer MJPEG sur 2, 3, 4 et 5 processeurs ? Expliquez votre démarche.

2.2 Déploiement sur une architecture à 5 processeurs

Déployez l'architecture MJPEG sur une architecture VgmnNoirqMultiPro comportant cinq processeurs, (c'est à dire une tâche par processeur) et lancez la simulation.

  • Question 3 : Combien faut-il de cycles pour décompresser 25 images?

On cherche maintenant à estimer le taux d'utilisation de chacun des 5 processeurs.

  • Question 4 : Quel est selon vous le processeur le plus chargé ? Expliquez une manière de le vérifier expérimentalement et faites cette vérification.

2.3 Déploiement sur des architectures à 4, 3 et 2 processeurs

Déployez l'application MJPEG sur des architectures matérielles comportant 4, puis 3, puis 2 processeurs, en utilisant les informations données sur les charges de chacune des tâches. Pour cela, placez intelligemment les tâches de façon à obtenir les temps de décompression les plus courts possibles.

  • Question 5 : Quel est le nombre de cycles minimal pour décompresser 25 images avec 4 processeurs ?
  • Question 6 : Quel est le nombre de cycles minimal pour décompresser 25 images avec 3 processeurs ?
  • Question 7 : Quel est le nombre de cycles minimal pour décompresser 25 images avec 2 processeurs ?

2.4 Influence de la taille des caches

On souhaite maintenant évaluer l'influence de la taille des caches processeurs sur le temps de décompression. Utilisez la ligne de commande de votre description pour lui passer systématiquement la taille des caches :

# debut du fichier de description
# important: importer dsx en premier
from dsx import *
import sys

dcache_lines = int(sys.argv[1])
icache_lines = int(sys.argv[2])

Utilisez ensuite les deux variables dcache_lines et icache_lines dans votre description.

On se place dans l'hypothèse d'une architecture à 2 processseurs, en conservant le placement des tâches optimal défini à la question précédente. On utilisera des lignes de cache de 8 mots, et on se contentera de faire varier le nombre de lignes.

  • Mesurez le temps de calcul pour décompresser 12 images, en utilisant deux "gros" caches de 1024 lignes, pour les instructions comme pour les données.
  • Refaites cette mesure en diminuant progressivement le nombre de lignes du cache de données (256, puis 64, 16, 4 et enfin, 1), en conservant une capacité de 1024 lignes pour le cache d'instructions.
  • Idem en diminuant progressivement le nombre de lignes du cache d'instructions (256, puis 64, 16, 4, et enfin 1), en conservant une capacité de 1024 lignes pour le cache de données.
  • Question 8 : Regroupez ces résultats dans deux tableaux de synthèse.
  • Question 9 : Que choisiriez-vous comme capacité pour les caches, sachant que la surface de la mémoire embarquée est un facteur important du coût de fabrication (vous comparerez en particulier la capacité des caches à la capacité des bancs mémoire ram0 et ram1).

3. Compte-Rendu

Comme pour les TP précédents, vous rendrez une archive contenant les fichiers suivants :

$ tar tzf binome0_binome1.tar.gz
tp3/
tp3/rapport.pdf
tp3/mjpeg/
tp3/mjpeg/mjpeg
tp3/mjpeg/vgmn_noirq_multi.py
tp3/mjpeg/src/
tp3/mjpeg/src/iqzz/iqzz.c
tp3/mjpeg/src/libu/libu.c

Le fichier mjpeg sera celui de la partie 2.4, avec la gestion de la ligne de commande. Les deux sources C sont ceux des deux derniers TP, éventuellement modifiés.

Envoyez cette archive au plus tard la veille de la séance du TP 4, à [MailAsim:Quentin.Meunier Quentin Meunier]. Tout retard sera sanctionné.

Suite

TP Suivant : TP4_Multipipe

Last modified 8 years ago Last modified on Dec 8, 2015, 5:00:04 PM

Attachments (1)

Download all attachments as: .zip