Changes between Version 1 and Version 2 of Partiel2016


Ignore:
Timestamp:
Oct 31, 2018, 12:04:35 PM (6 years ago)
Author:
pirouz
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Partiel2016

    v1 v2  
    11
    2 == '''Architecture des processeurs et optimisation'''==
     2= Architecture des processeurs et optimisation =
    33
    44
    5 == '''Novembre 2016         Documents autorisés - Durée 2h'''==
     5== Novembre 2016            Documents autorisés - Durée 2h ==
    66
    77
    8 == '''utiliser impérativement les feuilles quadrillées fournies pour les schémas simplifiés''' ==
     8'''utiliser impérativement les feuilles quadrillées fournies pour les schémas simplifiés'''
    99
    1010
    11 == '''Une réponse non justifiée sera considérée comme fausse''' ==
     11'''Une réponse non justifiée sera considérée comme fausse'''
    1212
    1313
    1414
    1515On souhaite comparer deux réalisations de l’architecture Mips-32.
    16 La première réalisation, appelée '''Mips''', est la réalisation en 5 étages ('''IFC''', '''DEC''', '''EXE''', '''MEM''' et '''WBK''') étudiée en cours.[[BR]]
     16La première réalisation, appelée `Mips`, est la réalisation en 5 étages (`IFC`, `DEC`, `EXE`, `MEM` et `WBK`) étudiée en cours.[[BR]]
    1717
    18 La seconde réalisation, appelée '''MipsO''', est également une réalisation en 5 étages : '''IFC''', '''DEC''', '''EXE''', '''MEM''' et '''WBK'''. Les étages '''MipsO''' sont identiques à ceux de '''Mips'''.[[BR]]
     18La seconde réalisation, appelée `MipsO`, est également une réalisation en 5 étages : `IFC`, `DEC`, `EXE`, `MEM` et `WBK`. Les étages `MipsO` sont identiques à ceux de `Mips`.[[BR]]
    1919
    20 L’objectif de cette comparaison est d’étudier l’impact de la mise en place de bypass impliquant les instructions de type load. En effet, dans '''Mips''', lorsqu’une instruction load est suivie par une instruction qui dépend du résultat du load, des bypass permettent d’éviter des cycles de gel. Ces bypass récupèrent l’opérande mémoire lu par l’instruction load dans son étage '''MEM''' et l’achemine vers l’instruction qui a besoin de cet opérande.[[BR]]
     20L’objectif de cette comparaison est d’étudier l’impact de la mise en place de bypass impliquant les instructions de type load. En effet, dans `Mips`, lorsqu’une instruction load est suivie par une instruction qui dépend du résultat du load, des bypass permettent d’éviter des cycles de gel. Ces bypass récupèrent l’opérande mémoire lu par l’instruction load dans son étage `MEM` et l’achemine vers l’instruction qui a besoin de cet opérande.[[BR]]
    2121
    22 On souhaite étudier l’impact de la suppression de ces bypass dans la réalisation '''MipsO'''.[[BR]]
     22On souhaite étudier l’impact de la suppression de ces bypass dans la réalisation `MipsO`.[[BR]]
    2323
    24 1-      Si l’on ignore les techniques d’optimisation, un compilateur pour '''MipsO''' est-il différent d’un compilateur pour '''Mips''' ?[[BR]]
     241-      Si l’on ignore les techniques d’optimisation, un compilateur pour `MipsO` est-il différent d’un compilateur pour `Mips` ?[[BR]]
    2525
    26262-      Dans une réalisation encore plus simplifiée du processeur, les dépendances de données sur le résultat des instructions load ne sont pas gérées par le matériel ni en ce qui concerne les bypass ni pour la génération des cycles de gel. Cette simplification a-t-elle un impact sur le compilateur ? [[BR]]
    2727
    28 3-      Dans MipsO, on supprimant les bypass sur les opérandes mémoire, on espère augmenter la fréquence de fonctionnement du processeur. Expliquer pourquoi peut-on obtenir une telle amélioration ?[[BR]]
     283-      Dans `MipsO`, on supprimant les bypass sur les opérandes mémoire, on espère augmenter la fréquence de fonctionnement du processeur. Expliquer pourquoi peut-on obtenir une telle amélioration ?[[BR]]
    2929
    30 4-      Dans Mips il existe 8 bypass pour limiter la dégradation des performances due aux dépendances de données. Quels sont les bypass dans la réalisation '''MipsO''' ? Justifier votre réponse à l’aide de schémas simplifiés. Pour chaque bypass donner un exemple de suite d'instructions qui illustre la nécessité de ce bypass.[[BR]]
     304-      Dans `Mips`, il existe 8 bypass pour limiter la dégradation des performances due aux dépendances de données. Quels sont les bypass dans la réalisation `MipsO` ? Justifier votre réponse à l’aide de schémas simplifiés. Pour chaque bypass donner un exemple de suite d'instructions qui illustre la nécessité de ce bypass.[[BR]]
    3131
    3232
     
    4242       
    4343{{{
     44#!C
    4445unsigned char *neg_msk (unsigned char *pt_img,
    4546                        unsigned char *pt_msk,
     
    5859
    5960
    60 Un compilateur (non pipeline) a produit le code assembleur suivant pour la boucle principale de cette fonction. On suppose qu'à l'entrée de la boucle le registre R4 contient l'adresse du tableau pt_img, R5 l'adresse du tableau pt_msk et le registre R6 l’adresse de fin du tableau pt_img (l'adresse qui suit immédiatement celle de la dernière case du tableau). Le registre R7 contient la valeur 255.[[BR]]
     61Un compilateur (non pipeline) a produit le code assembleur suivant pour la boucle principale de cette fonction. On suppose qu'à l'entrée de la boucle le registre `R4` contient l'adresse du tableau ''pt_img'', `R5` l'adresse du tableau ''pt_msk'' et le registre `R6` l’adresse de fin du tableau ''pt_img'' (l'adresse qui suit immédiatement celle de la dernière case du tableau). Le registre `R7` contient la valeur 255.[[BR]]
    6162
    6263Version 1 :[[BR]]
    6364
    6465{{{
    65 
     66#!asm
    6667        _For :  Lbu     r7 , 0 (r5 )    ; pt_msk[i]
    6768                Bne     r7 , r0 , _Endif
     
    7677
    7778
    78 5-      Modifier le code pour qu’il soit exécutable sur '''Mips''' et analyser l’exécution de la boucle à l’aide d’un schéma simplifié dans le cas où le branchement échoue (faire figurer les bypass sur le schéma). Combien de cycles sont-ils nécessaires à l’exécution d’une itération de la boucle dans le cas où le branchement échoue et dans le cas où le branchement réussit ? Calculer le CPI et le CPI-utile en supposant que dans 25% des cas le branchement échoue.[[BR]]
     795-      Modifier le code pour qu’il soit exécutable sur `Mips` et analyser l’exécution de la boucle à l’aide d’un schéma simplifié dans le cas où le branchement échoue (faire figurer les bypass sur le schéma). Combien de cycles sont-ils nécessaires à l’exécution d’une itération de la boucle dans le cas où le branchement échoue et dans le cas où le branchement réussit ? Calculer le CPI et le CPI-utile en supposant que dans 25% des cas le branchement échoue.[[BR]]
    7980
    80 6-      Modifier le code pour qu’il soit exécutable sur '''MipsO''' et analyser l’exécution de la boucle à l’aide d’un schéma simplifié dans le cas où le branchement échoue (faire figurer les bypass sur le schéma). Combien de cycles sont-ils nécessaires à l’exécution d’une itération de la boucle dans le cas où le branchement échoue et dans le cas où le branchement réussit ? Calculer le CPI et le CPI-utile en supposant que dans 25% des cas le branchement échoue.[[BR]]
     816-      Modifier le code pour qu’il soit exécutable sur `MipsO` et analyser l’exécution de la boucle à l’aide d’un schéma simplifié dans le cas où le branchement échoue (faire figurer les bypass sur le schéma). Combien de cycles sont-ils nécessaires à l’exécution d’une itération de la boucle dans le cas où le branchement échoue et dans le cas où le branchement réussit ? Calculer le CPI et le CPI-utile en supposant que dans 25% des cas le branchement échoue.[[BR]]
    8182
    82 7-      Optimiser le code de la boucle pour '''MipsO''' en modifiant l’ordre des instructions de manière à éviter au maximum les cycles perdus (expliquer votre démarche). Combien de cycles sont-ils nécessaires dans '''MipsO''' pour effectuer une itération ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
     837-      Optimiser le code de la boucle pour `MipsO` en modifiant l’ordre des instructions de manière à éviter au maximum les cycles perdus (expliquer votre démarche). Combien de cycles sont-ils nécessaires dans `MipsO` pour effectuer une itération ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
    8384
    84         Même question pour la réalisation '''Mips'''.[[BR]]
     85        Même question pour la réalisation `Mips`.[[BR]]
    8586
    86 8-      Pour améliorer les performances d’exécution, on décide de dérouler une fois le code de la boucle (traitement de 2 éléments à chaque itération). Proposer un code optimisé après le déroulement pour '''MipsO'''. Combien de cycles sont-ils nécessaires dans '''MipsO''' pour traiter un élément ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
     878-      Pour améliorer les performances d’exécution, on décide de dérouler une fois le code de la boucle (traitement de 2 éléments à chaque itération). Proposer un code optimisé après le déroulement pour `MipsO`. Combien de cycles sont-ils nécessaires dans '''MipsO''' pour traiter un élément ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
    8788
    88         Même question pour '''Mips'''.[[BR]]
     89        Même question pour `Mips`.[[BR]]
    8990
    9091
    9192
    92 Un autre compilateur (non pipeline) a produit une version différente pour le code de la boucle en remarquant que lorsque l’on calcule sur 8 bits :[[BR]]
     93Un autre compilateur (non pipeline) a produit une version différente pour le code de la boucle en remarquant que lorsque l’on calcule sur 8 bits ''255-x = not(x)'':[[BR]]
    9394
    9495
     
    9697
    9798{{{
     99#!asm
    98100        _For :  Lbu     r7 , 0 (r5 )    ; pt_msk[i]
    99101                Lbu     r8 , 0 (r4 )    ; pt_img[i]
     
    106108
    107109
    108 9-      Après adaptation du code de la version 2 à '''MipsO''', combien de cycles sont-ils nécessaires à l’exécution d’une itération de la boucle ? Calculer le CPI-utile. Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code.[[BR]]
     1109-      Après adaptation du code de la version 2 à `MipsO`, combien de cycles sont-ils nécessaires à l’exécution d’une itération de la boucle ? Calculer le CPI-utile. Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code.[[BR]]
    109111
    110         Même question pour la réalisation '''Mips'''.[[BR]]
     112        Même question pour la réalisation `Mips`.[[BR]]
    111113
    112 10-     Optimiser le code de la boucle en modifiant l’ordre des instructions pour '''MipsO''' de manière à éviter au maximum les cycles perdus. Combien de cycles sont-ils nécessaires pour effectuer une itération ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
     11410-     Optimiser le code de la boucle en modifiant l’ordre des instructions pour `MipsO` de manière à éviter au maximum les cycles perdus. Combien de cycles sont-ils nécessaires pour effectuer une itération ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
    113115
    114         Même question pour la réalisation '''Mips'''.[[BR]]
     116        Même question pour la réalisation `Mips`.[[BR]]
    115117
    116 11-     Pour améliorer les performances d’exécution, on décide de dérouler une fois le code de la boucle (traitement de 2 éléments à chaque itération). Proposer un code optimisé pour '''MipsO''' après le déroulement. Combien de cycles sont-ils nécessaires pour traiter un élément ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
     11811-     Pour améliorer les performances d’exécution, on décide de dérouler une fois le code de la boucle (traitement de 2 éléments à chaque itération). Proposer un code optimisé pour `MipsO` après le déroulement. Combien de cycles sont-ils nécessaires pour traiter un élément ? Il n'est pas nécessaire de faire un schéma mais d'indiquer simplement les cycles perdus sur le code après optimisation.[[BR]]
    117119
    118         Même question pour la réalisation '''Mips'''.[[BR]]
     120        Même question pour la réalisation `Mips`.[[BR]]
    119121
    12012212-     Pour chacune des 6 versions du code :[[BR]]
    121123
    122124        o       Version 1 (code original, code réordonné, code déroulé)[[BR]]
    123 
    124125        o       Version 2 (code original, code réordonné, code déroulé)[[BR]]
    125126
    126 quel gain en fréquence doit-on obtenir pour que la réalisation '''MipsO''' soit plus performante que la réalisation '''Mips''' ?
     127quel gain en fréquence doit-on obtenir pour que la réalisation `MipsO` soit plus performante que la réalisation `Mips` ?