Changes between Version 75 and Version 76 of SoclibCourseTp4


Ignore:
Timestamp:
Dec 11, 2010, 4:45:49 PM (14 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SoclibCourseTp4

    v75 v76  
    216216
    217217Le 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.
    219219 * 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).
    221221
    222222== 5.3 Exécution parallèle sur architecture bi-processeurs ==
     
    226226On s'efforcera cependant que ce code de boot soit facilement extensible pour s'adapter à des architectures contenant plus de 2 processeurs
    227227
     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
    228230'''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?
    229231
    230232'''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...
    231233
    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.
    238239
    239240'''Question''' : Compilez le logiciel embarqué, puis lancez l'exécution sur le simulateur  '''simulator_multi.x''', avec 2 processeurs. 
     
    241242== 5.4 Exécution parallèle sur architecture octo-processeurs ==
    242243
    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.
     244On 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.
    246247
    247248'''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.