Changes between Version 75 and Version 76 of SoclibCourseTp4
- Timestamp:
- Dec 11, 2010, 4:45:49 PM (14 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SoclibCourseTp4
v75 v76 216 216 217 217 Le mécanisme est le suivant : 218 * Tous les processeurs exécutent le même ''code de boot, mais l'exécution de ce code dépend de l'index du processeur. L'index du processeur (''proc_id'') étant stocké dans le registre système ($15, 1) du processeur MIPS32, sa valeur peut être testée par le logiciel. Remarquez que la valeur de ce registre est initialisée par le constructeur, ce qui modélise une valeur ''cablée'' lors de la fabrication de la puce.218 * Tous les processeurs exécutent le même code de boot, mais l'exécution de ce code dépend de l'index du processeur. L'index du processeur (''proc_id'') étant stocké dans le registre système ($15, 1) du processeur MIPS32, sa valeur peut être testée par le logiciel. Remarquez que la valeur de ce registre est initialisée par le constructeur, ce qui modélise une valeur ''cablée'' lors de la fabrication de la puce. 219 219 * Les tâches s'exécutant en parallèle, chaque tâche (et donc chaque processeur) doit disposer de sa propre pile d'exécution. On définit un seul segment pour les différentes piles d'exécution, mais les ponteurs de pile des différents processeurs doivent être initialisés à des valeurs différentes en fonction du ''proc_id''. 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).220 * Chaque processeur exécutant un programme utilisateur différent, le points d'entrée du programme (registre EPC dans le cas du MIPS32) doit être initialisé à une valeur dépendant du ''proc_id'' (main_0, main_1, main_2, ... main_7). 221 221 222 222 == 5.3 Exécution parallèle sur architecture bi-processeurs == … … 226 226 On s'efforcera cependant que ce code de boot soit facilement extensible pour s'adapter à des architectures contenant plus de 2 processeurs 227 227 228 '''Question''' : Créez un nouveau répertoire '''soft_multi''', et recopiez dans ce répertoire les fichiers contenus dans le répertoire '''soft''', car tous les fichiers doivent être modifiés. 229 228 230 '''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 231 230 232 '''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 233 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. 234 '''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. 235 236 '''Question''' : Modifiez le fichier '''Makefile''' du répertoire '''soft''' pour que soient compilés (en plus du code système et du fichier '''reset.s''') les deux programmes '''main_0.c''' et '''main_1.c'''. 237 238 '''Question''' : Modifiez dans le fichier '''ldscript''' la valeur de la variable qui informe le système d'exploitation du nombre de processeurs présents dans l'architecture matérielle. 238 239 239 240 '''Question''' : Compilez le logiciel embarqué, puis lancez l'exécution sur le simulateur '''simulator_multi.x''', avec 2 processeurs. … … 241 242 == 5.4 Exécution parallèle sur architecture octo-processeurs == 242 243 243 On souhaite maintenant exécuter huit programmes en parallèle sur 8processeurs.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.244 On souhaite maintenant exécuter huit programmes en parallèle sur huit processeurs. 245 246 '''Question''' : Ecrivez six autres petits programmes ''main_2'' à ''main_7''. Si vous manquez d'imagination, vous pouvez vous contenter de ré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 247 248 '''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.