Changes between Version 9 and Version 10 of MjpegCourse/Multipro
- Timestamp:
- Dec 3, 2010, 3:35:26 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
MjpegCourse/Multipro
v9 v10 1 1 {{{ 2 2 #!html 3 <h1>TP3 : Déploiement de l'application MJPEG surarchitecture multiprocesseur</h1>3 <h1>TP3 : Déploiement de l'application MJPEG sur une architecture multiprocesseur</h1> 4 4 }}} 5 5 [[PageOutline]] 6 6 7 TP Précédent : MjpegCourse/Monopro7 TP Précédent : MjpegCourse/Monopro 8 8 9 9 = 0. Objectif = 10 10 11 Comme pour les précédents TP, vous aurez à fournir un certain nombre de sources et un rapport. 12 Il vous est conseillé de parcourir la documentation dans le trac, en partant de WikiStart. 11 Comme pour les précédents TP, vous aurez à fournir un certain nombre de sources 12 et un rapport. Il vous est conseillé de parcourir la documentation dans le 13 trac, en partant de WikiStart. 13 14 14 15 15 La première partie de ce TP vise la description d'une architecture matérielle multiprocesseurs générique, 16 appelée !VgmnNoirqMulti. Cette architecture est générique dans le sens où on peut faire varier par un simple 17 paramètre le nombre de processeurs et le nombre de bancs mémoire, ainsi que les caractéristiques des caches 18 rattachés aux processeurs. 16 La première partie de ce TP vise la description d'une architecture matérielle 17 multiprocesseurs générique, appelée !VgmnNoirqMulti. Cette architecture est 18 générique dans le sens où on peut faire varier par un simple paramètre le 19 nombre de processeurs et le nombre de bancs mémoire, ainsi que les 20 caractéristiques des caches rattachés aux processeurs. 19 21 20 La seconde partie de ce TP vise à déployer l'application MJPEG sur cette plateforme générique en faisant varier 21 les paramètres dont on dispose. Cette ''exploration architecturale'' est le but réel de l'outil DSX. 22 La seconde partie de ce TP vise à déployer l'application MJPEG sur cette 23 plateforme générique en faisant varier les paramètres dont on dispose. Cette 24 ''exploration architecturale'' est le but réel de l'outil DSX. 22 25 23 26 = 1. Description de l'architecture générique !VgmnNoirqMulti = 24 27 25 L'architecture !VgmnNoirqMono utilisée dans le TP2 était une architecture mono-processeur non-paramètrable. 26 On se propose de décrire maintenant avec DSX une architecture multi-processeur générique, dont les paramètres sont : 28 L'architecture !VgmnNoirqMono utilisée dans le TP2 était une architecture 29 mono-processeur non-paramètrable. 30 31 On se propose de décrire maintenant avec DSX une architecture multiprocesseur 32 générique (illustrée ci-contre), dont les paramètres sont : 27 33 * Le nombre de processeurs : `proc_count` 28 34 * Le nombre de bancs mémoire : `ram_count` … … 34 40 Cette architecture comportera également un contrôleur de terminaux (!MultiTty). 35 41 36 Vous pourrez vous inspirer de l'architecture [MjpegCourse/VgmnNoirqMono VgmnNoirqMono] définie 37 dans le TP2, en n'hésitant pas à utiliser les constructions du langage Python permettant d'exprimer la généricité (tableaux, boucles, etc.). 38 Cette architecture générique !VgmnNoirqMulti sera décrite dans un fichier DSX séparé, pour faciliter sa réutilisation. 42 Vous pourrez vous inspirer de l'architecture [MjpegCourse/VgmnNoirqMono 43 VgmnNoirqMono] définie dans le TP2, en n'hésitant pas à utiliser les 44 constructions du langage Python permettant d'exprimer la généricité (tableaux, 45 boucles, etc.) 46 Cette architecture générique !VgmnNoirqMulti sera décrite dans un fichier DSX 47 séparé, pour faciliter sa réutilisation. 39 48 40 Pour pouvez ajouter des paramètres à la fonction définissant l'architecture. Des valeurs par défaut peuvent être spécifiées. 49 Vous pouvez ajouter des paramètres à la fonction définissant l'architecture, 50 auxquels des valeurs par défaut peuvent être spécifiées. Par exemple : 41 51 {{{ 42 def VgmnNoirqMulti( proc_count, ram_count, icache_lines = 16, icache_words = 8, dcache_lines = 16, dcache_words = 8 ) 52 def VgmnNoirqMulti( proc_count, ram_count, icache_lines = 16, icache_words = 8, 53 dcache_lines = 16, dcache_words = 8 ) 43 54 }}} 44 55 45 Vous validerez cette architecture générique !VgmnNoirqMulti, en déployant l'application MJPEG sur 46 une instance particulière de cette architecture équivalente à celle utilisée dans le TP2 (c'est à dire un seul 47 processeur et deux bancs mémoire). On utilisera le système d'exploitation embarqué Mutek/S. 48 On utilisera deux bancs mémoire, et des caches de 16 lignes de 8 mots. 56 Vous validerez cette architecture générique !VgmnNoirqMulti, en déployant 57 l'application MJPEG sur une instance particulière de cette architecture, 58 équivalente à celle utilisée dans le TP2 : c'est à dire un seul processeur et 59 deux bancs mémoire. Pour l'architecture matérielle, vous spécifierez des caches 60 processeurs de 16 lignes de 8 mots, et pour la partie logicielle, vous 61 utiliserez le système d'exploitation embarqué Mutek/S. 49 62 50 On instanciera l'architecture avec la ligne (les paramètres non spécifiés prennent leurs valeurs par défaut): 63 64 Vous instancierez l'architecture avec la ligne (les paramètres non spécifiés 65 prennent leurs valeurs par défaut) : 51 66 {{{ 52 67 archi = VgmnNoirqMulti( proc_count = 1, ram_count = 2 ) 53 68 }}} 54 69 55 [[Image(MjpegCourse:q.gif)]] Q1 : Combien faut-il de cycles pour décompresser 25 images?70 [[Image(MjpegCourse:q.gif)]] Q1 : Combien faut-il de cycles pour décompresser 25 images? 56 71 57 72 = 2. Exploration Architecturale = 58 73 59 Dans cette seconde partie, on va déployer l'application MJPEG sur l'architecture MPSoC !VgmnNoirqMulti. 60 On va principalement faire varier le nombre de processeurs et la répartition des tâches logicielles sur les 61 processeurs. Les deux tâches d'entrée/sortie `tg` et `ramdac` sont toujours implantées sur des 62 coprocesseurs matériels spécialisés, et il ya donc 5 tâches "logicielles" à déployer sur un nombre de processeurs 63 qui reste à déterminer. 74 Dans cette seconde partie, on va déployer l'application MJPEG sur 75 l'architecture MPSoC !VgmnNoirqMulti. 76 Vous ferez principalement varier le nombre de processeurs et la répartition des 77 tâches logicielles sur les processeurs. Les deux tâches d'entrée/sortie `tg` 78 et `ramdac` restent pour le moment implantées sur des coprocesseurs matériels 79 spécialisés : il y a donc 5 tâches "logicielles" à déployer sur un nombre de 80 processeurs qui reste à déterminer. 64 81 65 82 == 2.1 Profilage de l'application == 66 83 67 Pour guider la répartition des tâches sur les processeurs, on commence par effectuer un profilage 68 de l'application sur station de travail POSIX, en mesurant les temps passés dans les différentes tâches. 84 Pour guider la répartition des tâches sur les processeurs, on commence par 85 effectuer un profilage de l'application sur station de travail POSIX, en 86 mesurant les temps passés dans les différentes tâches. 69 87 70 On prend comme charge relative entre les tâches les valeurs suivantes: 88 Ce profilage nous donne, comme charge relative entre les tâches, les valeurs 89 suivantes : 71 90 72 91 || idct || 45% || … … 76 95 || libu || 3% || 77 96 78 [[Image(MjpegCourse:q.gif)]] Q2: Qu'en déduisez-vous sur les façons optimales de déployer MJPEG sur 2, 3, 4 et 5 processeurs ? 97 [[Image(MjpegCourse:q.gif)]] Q2 : Qu'en déduisez-vous sur les façons optimales 98 de déployer MJPEG sur 2, 3, 4 et 5 processeurs ? 79 99 80 100 == 2.2 Déploiement sur une architecture à 5 processeurs == 81 101 82 Déployez l'architecture MJPEG sur une architecture !VgmnNoirqMultiPro comportant cinq processeurs, 83 (c'est à dire une tâche par processeur) et lancez la simulation. 102 Déployez l'architecture MJPEG sur une architecture !VgmnNoirqMultiPro 103 comportant cinq processeurs, (c'est à dire une tâche par processeur) et lancez 104 la simulation. 84 105 85 [[Image(MjpegCourse:q.gif)]] Q3 : Combien faut-il de cycles pour décompresser 25 images?106 [[Image(MjpegCourse:q.gif)]] Q3 : Combien faut-il de cycles pour décompresser 25 images? 86 107 87 108 On cherche maintenant à estimer le taux d'utilisation de chacun des 5 processeurs. 88 109 89 [[Image(MjpegCourse:q.gif)]] Q5 : Quel est selon vous le processeur le plus chargé ?110 [[Image(MjpegCourse:q.gif)]] Q5 : Quel est selon vous le processeur le plus chargé ? 90 111 91 112 == 2.3 Déploiement sur des architectures à 4, 3 et 2 processeurs == 92 113 93 Déployez l'application MJPEG sur des architectures matérielles comportant 4, puis 3, puis 2 processeurs, 94 en utilisant les informations données sur les charges de chacune des tâches, 95 placez ''intelligemment'' les tâches de façon à obtenir les temps de décompression les plus courts possibles. 114 Déployez l'application MJPEG sur des architectures matérielles comportant 4, 115 puis 3, puis 2 processeurs, en utilisant les informations données sur les 116 charges de chacune des tâches. Pour cela, placez ''intelligemment'' les tâches 117 de façon à obtenir les temps de décompression les plus courts possibles. 96 118 97 [[Image(MjpegCourse:q.gif)]] Q6: Quel est le nombre de cycles minimal pour décompresser 25 images avec 4 processeurs ? 119 [[Image(MjpegCourse:q.gif)]] Q6 : Quel est le nombre de cycles minimal pour 120 décompresser 25 images avec 4 processeurs ? 98 121 99 [[Image(MjpegCourse:q.gif)]] Q7: Quel est le nombre de cycles minimal pour décompresser 25 images avec 3 processeurs ? 122 [[Image(MjpegCourse:q.gif)]] Q7 : Quel est le nombre de cycles minimal pour 123 décompresser 25 images avec 3 processeurs ? 100 124 101 [[Image(MjpegCourse:q.gif)]] Q8: Quel est le nombre de cycles minimal pour décompresser 25 images avec 2 processeurs ? 125 [[Image(MjpegCourse:q.gif)]] Q8 : Quel est le nombre de cycles minimal pour 126 décompresser 25 images avec 2 processeurs ? 102 127 103 128 == 2.4 Influence de la taille des caches == 104 129 105 On souhaite maintenant évaluer l'influence de la taille des caches sur le temps de décompression. 106 Utilisez la ligne de commande de votre description pour lui passer systématiquement la taille des caches: 130 On souhaite maintenant évaluer l'influence de la taille des caches processeurs 131 sur le temps de décompression. Utilisez la ligne de commande de votre 132 description pour lui passer systématiquement la taille des caches : 107 133 {{{ 108 134 # debut du fichier de description … … 114 140 icache_lines = int(sys.argv[2]) 115 141 }}} 116 Utilisez ensuite les deux variables dcache_lines et icache_lines. 142 Utilisez ensuite les deux variables `dcache_lines` et `icache_lines` dans votre 143 description. 117 144 118 On se place dans l'hypothèse d'une architecture à 2 processseurs, en conservant le placement 119 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 120 faire varier le nombre de lignes. 121 * Mesurez le temps de calcul pour décompresser 2 images, en utilisant deux "gros" 122 caches de 1024 lignes, pour les instructions comme pour les données. 145 On se place dans l'hypothèse d'une architecture à 2 processseurs, en conservant 146 le placement des tâches optimal défini à la question précédente. On utilisera 147 des lignes de cache de 8 mots, et on se contentera de faire varier le nombre de 148 lignes. 149 * Mesurez le temps de calcul pour décompresser 2 images, en utilisant deux 150 "gros" caches de 1024 lignes, pour les instructions comme pour les données. 123 151 * Refaites cette mesure en diminuant progressivement le nombre de lignes du 124 cache de données (256, puis 64, puis 16 puis 4 puis 1), en conservant une 125 capacité de 1024 lignes pour le cache d'instructions. 126 * Même question en diminuant progressivement le nombre de lignes du cache d'instructions 127 (256, puis 64, puis 16 puis 4 puis 1), en conservantune capacité de 1024 lignes pour le cache de données. 152 cache de données (256, puis 64, 16, 4 et enfin, 1), en conservant une capacité 153 de 1024 lignes pour le cache d'instructions. 154 * Même question en diminuant progressivement le nombre de lignes du cache 155 d'instructions (256, puis 64, 16, 4, et enfin 1), en conservantune capacité de 156 1024 lignes pour le cache de données. 128 157 129 [[Image(MjpegCourse:q.gif)]]Q9: Regroupez ces résultats dans deux tableaux de synthèse. 158 [[Image(MjpegCourse:q.gif)]]Q9 : Regroupez ces résultats dans deux tableaux de 159 synthèse. 130 160 131 [[Image(MjpegCourse:q.gif)]]Q10: Que choisiriez-vous comme capacité pour les caches, sachant 132 que la surface de la mémoire embarquée est un facteur important du coût de fabrication 133 (on comparera en particulier la capacité des caches à la capacité des bancs mémoire `ram0` et `ram1`). 161 [[Image(MjpegCourse:q.gif)]]Q10 : Que choisiriez-vous comme capacité pour les 162 caches, sachant que la surface de la mémoire embarquée est un facteur important 163 du coût de fabrication (vous comparerez en particulier la capacité des caches à 164 la capacité des bancs mémoire `ram0` et `ram1`). 134 165 135 166 = 3. Compte-Rendu = 136 167 137 Comme pour les TP précédents, vous rendrez une archive contenant: 168 Comme pour les TP précédents, vous rendrez une archive contenant les fichiers 169 suivants : 138 170 {{{ 139 171 $ tar tzf binome0_binome1.tar.gz … … 148 180 }}} 149 181 150 Le fichier `mjpeg.py` sera celui de la partie 2.4, avec la gestion de la ligne de commande. 151 Les deux sources C sont ceux des deux derniers TP, éventuellement modifiés. 182 Le fichier `mjpeg.py` sera celui de la partie 2.4, avec la gestion de la ligne 183 de commande. Les deux sources C sont ceux des deux derniers TP, éventuellement 184 modifiés. 152 185 153 Cette archive devra être livrée avant le jeudi 22 octobre 2009, 18h00 CEST (Paris) à [MailAsim:nipo Nicolas Pouillon] 186 Cette archive devra être livrée avant le jeudi 6 janvier 2011, 18h00 (heure de 187 Paris) à [MailAsim:joel.porquet Joël Porquet] 154 188 155 189 = Suite = 156 190 157 TP Suivant : MjpegCourse/Multipipe191 TP Suivant : MjpegCourse/Multipipe