218 | | * Chaque tâche correspondant à un programme utilisateur différent, les points d'entrée de chaque tache (registre EPC dans le cas du MIPS32) doivent être initialisées à des valeurs différentes (main_0, main_1, main_2, etc...) en fonction du ''proc_id''. |
219 | | |
220 | | '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le pointeur de pile ($29 dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. Chaque tâche disposera d'une pile de 64 Koctets. Quelle doit être la taille minimale du segment de pile défini dans la table des segments de la top-cell? |
221 | | |
222 | | '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le point d'entrée (registre EPC dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. On définira une table de sauts indexé par le proc_id et contenant les adresses ''main_0'' à ''main_7''. Ces adresses correspondent aux 8 point d'entrée de 8 programmes utilisateurs susceptibles de s'exécuter sur l'architecture multi-processeurs. |
223 | | |
224 | | '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que soient compilés le fichier '''teset.s''' ainsi modifié, et les deux programmes '''main_0.c''' et '''main_1.c''' de la section 4. |
225 | | |
226 | | '''Question''' : Lancez l'exécution sur le simulateur '''simulator_multi.x''', avec 2 processeurs. |
227 | | |
228 | | == 5.3 Exécution paralléle de programmes non-coopératifs == |
229 | | |
230 | | On souhaite pour commencer lancer l'exécution parallèle des deux programmes main_0 et main_1 définis précédemment sur une architecture à deux processeurs. |
231 | | |
232 | | '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour générer le logiciel embarqué, puis lancez la simulation sur une architecture à 2 processeurs. |
233 | | |
234 | | == 5.4 Programme coopératif multi-tâches == |
| 220 | * Chaque processeur exécutant un programme utilisateur différent, le points d'entrée du programme utilisateur (registre EPC dans le cas du MIPS32) doit être initialisé à une valeur différentedépendant du proc_id (main_0, main_1, main_2, ... main_7). |
| 221 | |
| 222 | == 5.3 Exécution parallèle sur architecture bi-processeurs == |
| 223 | |
| 224 | On commence par générer le code binaire pour une architecture comportant seulement 2 processeurs, |
| 225 | de façon à exécuter en parallèle des deux programmes ''main_0'' et ''main_1'' définis dans la section précédente. |
| 226 | On s'efforcera cependant que ce code de boot soit facilement extensible pour s'adapter à des architectures contenant plus de 2 processeurs |
| 227 | |
| 228 | '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le pointeur de pile ($29 dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. Chaque tâche disposera d'une pile de 64 Koctets. Quelle doit être la longueur du segment de pile défini dans la table des segments de la top-cell pour 2 processeurs? Pour 8 processeurs? |
| 229 | |
| 230 | '''Question''' : Modifiez le fichier '''reset.s''' pour que chaque processor PROC[i] initialize le registre de masque du composant ICU[i] qui lui est associé. Attention: les adresses de base des segment associés aux différents composants ICU[i] ont des valeurs différentes... |
| 231 | |
| 232 | '''Question''' : Modifiez le fichier '''reset.s''' pour initialiser le point d'entrée (registre EPC dans le cas du MIPS32) à une valeur dépendant du ''proc_id''. On définira une table de sauts indexé par le proc_id et contenant les adresses des deux programmes ''main_0'' à ''main_1''. Une table de saut est facilement extensible si on a plus de 2 processeurs. |
| 233 | |
| 234 | '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que soient compilés le fichier '''reset.s''' ainsi modifié, ainsi que les deux programmes '''main_0.c''' et '''main_1.c'''. |
| 235 | |
| 236 | '''Question''' : Modifiez dans le fichier '''ldscript''' la variable qui informe le ssystème d'exploitation du nombre de |
| 237 | processeurs présents dans l'architecture matérielle. |
| 238 | |
| 239 | '''Question''' : Compilez le logiciel embarqué, puis lancez l'exécution sur le simulateur '''simulator_multi.x''', avec 2 processeurs. |
| 240 | |
| 241 | == 5.4 Exécution parallèle sur architecture octo-processeurs == |
| 242 | |
| 243 | On souhaite maintenant exécuter huit programmes en parallèle sur 8 processeurs. |
| 244 | |
| 245 | '''Question''' : Ecrivez six autres petits programmes ''main_2'' à ''main_7''. Si vous manquez d'imagination, vous pouvez vous contenter de dépliquer le code du programme ''main_0". Si ces programmes utilisent les interruptions générées par le timer, n'oubliez pas que chaque processeur ne doit configurer que le timer qui lui appartient. |
| 246 | |
| 247 | '''Question''' : Modifiez les fichiers '''reset.s''', '''ldscript''', et '''Makefile''' du répertoire '''soft''' pour les adapter au cas de 8 processeurs, compilez le logiciel embarqué puis lancez l'exécution sur le simulateur '''simulator_multi.x''', avec 8 processeurs. |