Changes between Initial Version and Version 1 of Examen2009


Ignore:
Timestamp:
Dec 1, 2014, 11:29:56 AM (10 years ago)
Author:
meunier
Comment:

version initiale

Legend:

Unmodified
Added
Removed
Modified
  • Examen2009

    v1 v1  
     1
     2= Master d'informatique - 1 =
     3
     4== Architecture des Systèmes Intégrés – Décembre 2009 – Documents autorisés – Durée 2h ==
     5
     6Utiliser impérativement les feuilles quadrillées fournies pour les schémas.
     7
     8L'objectif de cet exercice est de comparer la performance d'exécution d'un algorithme de tri sur deux réalisations différentes du Mips. La première est la réalisation classique sur un pipeline de 5 étages présenté en cours. Cette réalisation est appelée `Mips`. La seconde, appelée `SS2`, est une réalisation superscalaire à deux pipelines. Il s'agit de la réalisation à 5 étages présentée en cours. `SS2` à la même fréquence d'horloge que la réalisation `Mips`.
     9
     10Un des algorithmes de tri les plus performants est le !QuickSort (tri rapide). Cet algorithme est appliqué à un tableau d'entiers. Le coeur de cet algorithme consiste à trouver la place définitive du premier élément du tableau (appelé pivot), dans le tableau trié, et de le placer. Les éléments plus grands que le pivot sont placés après celui-ci et les éléments plus petits avant.
     11
     12{{{
     13#!C
     14unsigned int PlacerPivot(int * tab, unsigned int size) {
     15   unsigned int idx = 1;
     16   int pivot = 0;
     17   int tmp = 0;
     18   unsigned int i = 1;
     19
     20   pivot = tab[0];
     21   for (i = 1; i != size; i++) {
     22      if (tab [i] < pivot) {
     23         tmp = tab[i];
     24         tab[idx] = tmp;
     25         tab[i] = tab[idx];
     26         idx++;
     27      }
     28   }
     29   tab[0] = tab[idx - 1];
     30   tab[idx - 1] = pivot;
     31 
     32   return idx;
     33}
     34}}}
     35
     36On dispose de deux versions pour le code de la boucle principale de cette fonction en assembleur Mips pipeline. À l'entrée de la boucle, le registre `R4` contient l'adresse de l'élément 1 du tableau (l'adresse de `tab[1]`). Le registre `R5` contient l'adresse de fin du tableau, le registre `R8` la valeur du pivot et le registre `R9`, l'adresse de l'élément d'index `idx`.
     37
     381ère version :
     39{{{
     40#!asm
     41Loop1 :
     42    Lw    r10, 0(r4)      ; tab[i]
     43    Slt   r11, r10, r8    ; tab[i] < pivot
     44    Beq   r11, r0, Endif1
     45    Nop
     46    Lw    r12, 0(r9)      ; tab[idx]
     47    Sw    r12, 0(r4)
     48    Sw    r10, 0(r9)
     49    Addiu r9, r9, 4
     50
     51Endif1 :
     52    Addiu r4, r4, 4
     53    Bne   r4, r5, Loop1
     54    Nop
     55}}}
     56
     572ème version :
     58{{{
     59#!asm
     60Loop2 :
     61    Lw    r10, 0(r4)   ; tab[i]
     62    Lw    r12, 0(r9)   ; tab[idx]
     63    Sw    r12, 0(r4)
     64    Sw    r10, 0(r9)
     65    Slt   r11, r10, r8 ; tab[i] < pivot
     66    Sll   r11, r11, 2
     67    Addu  r9, r9, r11
     68    Addiu r4, r4, 4
     69    Bne   r4, r5, Loop2
     70    Nop
     71}}}
     72
     73''1 - Analyser l'exécution de la boucle `Loop1` sur la réalisation `Mips` dans le cas où le branchement `Beq` réussit et dans le cas où il échoue. Il n'est pas demandé de faire un schéma, mais d'indiquer simplement les dépendances de données et les situations qui provoquent les cycles de gel. Calculer le nombre moyen de cycles par itération en supposant que dans 50% des cas le branchement réussit. Calculer le CPI et le CPI-utile.''
     74
     75''2 - Analyser l'exécution de la boucle `Loop1` à l'aide d'un schéma simplifié sur la réalisation `SS2` dans le cas où le branchement `Beq` réussit et dans le cas où il échoue. On suppose que l'étiquette `Loop1` se trouve sur une adresse alignée et que le buffer d'instructions est vide au début de l'exécution de la boucle. Calculer le nombre moyen de cycles par itération en supposant que dans 50% des cas le branchement réussit. Calculer le CPI et le CPI-utile.''
     76
     77''3 - Analyser l'exécution de la boucle `Loop2` sur la réalisation `Mips`. Il n'est pas demandé de faire un schéma mais, d'indiquer simplement les dépendances de données et les situations qui provoquent les cycles de gel. Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile.''
     78
     79''4 - Analyser l'exécution de la boucle `Loop2` à l'aide d'un schéma simplifié sur la réalisation `SS2` On suppose que l'étiquette `Loop2` se trouve sur une adresse alignée et que le buffer d'instructions est vide au début de l'exécution de la boucle. Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile.''
     80
     81''5 - Pour la réalisation `Mips`, réordonner le code de `Loop1` afin d'éviter au maximum les cycles perdus. Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile dans la même hypothèse (50% des branchements réussissent).''
     82
     83''6 - Pour la réalisation `Mips`, réordonner le code de `Loop2` afin d'éviter au maximum les cycles perdus. Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile.''
     84
     85''7 - Pour la réalisation `Mips`, optimiser le code de `Loop1` à l'aide de la technique "pipeline logiciel" en indiquant clairement quelles instructions font partie de quel étage. Puis réordonner afin d'éviter au maximum les cycles perdus. Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile.''
     86
     87''8 - Pour la réalisation `SS2`, dérouler le code de `Loop2` une fois (traitement de deux éléments par itération) et optimiser le code de manière à éviter les cycles perdus au maximum.''
     88
     89Dans la suite, on considère le code original des deux versions. On s'intéresse à la réalisation `Mips`.
     90
     91Le processeur est relié à la mémoire à travers un cache de données et un cache d'instructions. On souhaite étudier l'influence du cache de données sur la performance d'exécution. On suppose que le cache d'instructions est parfait (taux de Miss = 0).
     92
     93Le cache de données est un cache Write Through à correspondance directe. Il a une capacité de 16 Koctets. Un bloc du cache contient 32 octets.
     94
     95En cas de Hit, il faut 1 cycle pour accéder au cache. En cas de Miss, il faut 1 cycle pour détecter le Miss. Puis, il faut en moyenne 3 cycles pour initialiser l'accès à la mémoire. Une fois l'accès mémoire initialisé, on peut transférer un mot à chaque cycle. Lorsque le bloc a été entièrement reçu, il faut 1 cycle pour mettre à jour les mémoires du cache et 1 cycle supplémentaire pour répondre au processeur.
     96
     97Dans un premier temps, on ne s'intéresse qu'aux lectures en négligeant l'effet des écritures.
     98
     99On suppose qu'au début de la boucle le cache est vide. Le tableau à trier contient 1 K entiers et l'adresse du tableau est alignée (multiple de 4096).
     100
     101''9 - De combien de mots est constitué un bloc de cache ? En cas de Miss, combien de cycles dure une lecture ?''
     102
     103''10 - Pour chacune des deux versions, combien de Miss se produisent-ils lors de l'exécution des itérations ?''
     104
     105''11 - Calculer le CPI-utile de la boucle pour chacune des deux versions.''
     106
     107''12 - Comment évolue le taux de Miss si l'on remplace le cache Write Through à correspondance directe par un cache Write Back à correspondance directe. Justifier votre réponse.''
     108
     109''13 - Comment évolue le taux de Miss si l'on remplace le cache Write Through à correspondance directe par un cache Write Through associatif et si on augmente le niveau d'associativité. Justifier votre réponse.''
     110
     111On s'intéresse maintenant à l'effet des écritures.
     112
     113Le cache de données Write Through à correspondance directe contient un buffer d'écritures postées d'une place. Du point de vue du processeur, l'écriture ne peut se faire que s'il y a une place dans le buffer. Dans ce cas, l'écriture dans le buffer nécessite 1 cycle. Lorsque le buffer contient une demande d'écriture, le cache met en moyenne 4 cycles pour effectuer l'écriture en mémoire et vider le buffer.
     114
     115''14 - Pour chacune des deux versions, calculer le CPI-utile de la boucle en tenant compte de l'effet des lectures et des écritures.''
     116
     117''15 - En conservant un cache Write Through, quelles modifications faut-il apporter au cache pour réduire l'impact des écritures.''
     118
     119''16 - Calculer le CPI-utile si on met en oeuvre la solution que vous proposez.''