Changes between Initial Version and Version 1 of Examen2011


Ignore:
Timestamp:
Dec 1, 2014, 2:16:59 PM (10 years ago)
Author:
meunier
Comment:

Version initiale

Legend:

Unmodified
Added
Removed
Modified
  • Examen2011

    v1 v1  
     1
     2= Master Informatique - 1 =
     3
     4== Architecture des processeurs – Janvier 2012 – Documents autorisés – Durée 2h ==
     5
     6Utiliser impérativement les feuilles quadrillées fournies pour les schémas.
     7
     8Une réponse non justifiée sera considérée comme fausse.
     9
     10Une image est composée d'un ensemble de pixels organisés sous forme d'un tableau. Pour une image en 'niveaux de gris', chaque pixel est codé sur un octet. La valeur 0 représente la couleur noire, la valeur 255 la couleur blanche. Les valeurs comprises entre 0 et 255 représentent les différentes nuances de gris. Une fonction de traitement d'images consiste à appliquer un certain algorithme à un tableau de pixels.
     11
     12On souhaite étudier et comparer la performance d'exécution de la fonction Seuil sur deux réalisations de l'architecture 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 la réalisation superscalaire à 2 pipelines étudiée en cours.
     13
     14La fonction `Seuil` vérifie si la valeur d'un pixel est supérieure à un certain seuil. Dans ce cas, le pixel est remplacé par un pixel blanc (code 255) et dans le cas contraire par un pixel noir.
     15{{{
     16#!C
     17void Seuil(unsigned char * img,
     18           unsigned int size,
     19           unsigned char seuil) {
     20    for (i = 0; i != size; i++) {
     21        if (img[i] >= seuil) {
     22            img [i] = 255;
     23        }
     24        else {
     25            img [i] =   0;
     26        }
     27    }
     28    return;
     29}
     30}}}
     31
     32On dispose de deux versions pour le code de la boucle principale de la fonction `Seuil` en assembleur Mips-32 pipeline. Conformément aux conventions utilisées par le compilateur Gcc, on suppose qu'à l'entrée de la boucle :
     33 * le registre `R4` pointe sur le tableau de pixels
     34 * le registre `R5` contient le nombre de pixels de l'image
     35 * le registre `R6` contient la valeur du seuil
     36
     37De plus, le registre `R8` contient l'adresse immédiatement après la fin du tableau de pixels `(img + size)` et le registre `R7` la valeur 255.
     38{{{
     39#!asm
     40Version 1 :
     41_For1 :
     42    Lbu   r10, 0(r4)
     43    Sltu  r11, r10, r6
     44    Sb    r0,  0(r4)
     45    Bne   r11, r0, _Endif
     46    Nop
     47    Sb    r7 , 0(r4)
     48_Endif :
     49    Addiu r4, r4, 1
     50    Bne   r4, r8, _For1
     51    Nop
     52}}}
     53
     54Version 2 :
     55{{{
     56#!asm
     57_For2 :
     58    Lbu   r10, 0(r4)
     59    Sltu  r11, r10, r6
     60    Addiu r11, r11, -1
     61    Sb    r11, 0(r4)
     62    Addiu r4,  r4, 1
     63    Bne   r4,  r8, _For2
     64    Nop
     65}}}
     66
     67Dans tout l'exercice, on suppose qu'en moyenne 50% des pixels sont en dessous du seuil et que cette répartition est uniforme en tout point de l'image. L'image contient 4K pixels.
     68
     69Dans un premier temps, on considère que le système mémoire est parfait (tous les accès mémoire s'effectuent en 1 cycle).
     70
     71''1 - Pour la version 1, calculer le nombre moyen de cycles par itération sur la réalisation `Mips`. Il n'est pas demandé de faire un schéma, mais d'indiquer simplement sur le code les cycles de gel. Calculer le CPI et le CPI-utile.''
     72
     73''2 - Même question pour la version 2.''
     74
     75''3 - Pour la version 1, analyser l'exécution de la boucle à l'aide d'un schéma simplifié pour `SS2`. On suppose que l'étiquette `_For1` se trouve sur une adresse alignée (multiple de 8) et qu'au début de la boucle le buffer d'instructions est vide. Faire un schéma dans le cas où le branchement réussit et un schéma dans le cas où il échoue. Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile.''
     76
     77''4 - Pour la version 2, analyser l'exécution de la boucle à l'aide d'un schéma simplifié pour `SS2`. On suppose que l'étiquette `_For1` se trouve sur une adresse alignée (multiple de 8) et qu'au début de la boucle le buffer d'instructions est vide. Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile.''
     78
     79''5 - Pour la version 1, optimiser le code de la boucle pour la réalisation `SS2` à l'aide de la technique pipeline logiciel.''
     80
     81''6 - Même question pour la version 2.''
     82
     83Dans le reste du sujet, on considère le code original des 2 versions pour la réalisation `Mips`.
     84
     85On suppose maintenant que le processeur est relié à un cache de données et à un cache d'instructions séparés. Le cache d'instructions est parfait (taux de miss = 0).
     86Le cache de données a une capacité de 2 Koctets. C'est un cache à correspondance directe (Direct Mapping) et un bloc du cache contient 16 octets.
     87Le cache est relié à la mémoire primaire à travers un bus. A chaque cycle, on peut transférer 4 octets (1 mot) sur le bus. Pour initialiser le transfert, il faut en moyenne 5 cycles. Pour charger un bloc manquant dans le cache, il faut donc 9 cycles (5 + 1 * (16 / 4)).
     88
     89''7 - Combien d'emplacements le cache de données contient-il ? Combien d'ensembles ? De combien de blocs le tableau de pixels est-il constitué ?''
     90
     91On souhaite évaluer la performance d'exécution des 2 versions de la fonction `Seuil` dans 2 hypothèses.
     92
     93D'abord, on utilise un cache de données "Write Through" qui dispose d'un buffer d'écritures postées de 1 place. Le buffer est vidé à la fin de la transaction sur le bus.
     94On suppose qu'au début de l'exécution de la fonction le cache de données est vide.
     95
     96''8 - Pour la version 1, combien de Miss se produisent-ils lors du traitement de l'image ? Calculer le nombre de cycles supplémentaires par itération dus aux lectures. Calculer le nombre cycles supplémentaires par itération dus aux écritures. En déduire le nombre moyen de cycles par itération, le CPI et le CPI-utile.''
     97
     98''9 - Même question pour la version 2.''
     99
     100On utilise un cache de données "Write Back". Pour une écriture, lorsque le bloc n'est pas présent dans le cache, le cache commence par charger le bloc manquant, puis le modifie.
     101
     102''10 - Pour la version 1, combien de Miss se produisent-ils lors du traitement de l'image à cause des lectures (distinguer 2 types de Miss) ? Calculer le nombre de cycles supplémentaires par itération dus au Miss. Combien de Miss se produisent-ils lors du traitement de l'image à cause des écritures (distinguer 2 types de Miss) ? Calculer le nombre cycles supplémentaires par itération dus aux écritures.
     103En déduire le nombre moyen de cycles par itération, le CPI et le CPI-utile.''
     104
     105''11 - Même question pour la version 2.''
     106