Architecture des Systèmes Intégrés

publicité
Architecture des processeurs et optimisation
Janvier 2013
Documents autorisés - Durée 2h
utiliser impérativement les feuilles quadrillées fournies pour les schémas
Une réponse non justifiée sera considérée comme fausse
On souhaite étudier et comparer la performance d'exécution de la fonction strcpy sur différentes
plateformes matérielles. Toutes ces plateformes sont équipées de la réalisation super-scalaire à 2
pipelines de l’architecture Mips-32 étudiée en cours. Cette réalisation est appelée SS2.
La fonction strcpy copie une chaîne de caractères source dans une autre chaîne de caractères
destination.
char *strcpy (char *dst, char *src)
{
int i = 0;
while (src [i] != ‘\0’)
{
dst [i] = src [i];
i ++;
}
return dst;
}
Le code de la boucle principale de la fonction strcpy en assembleur Mips-32 pipeline est le
suivant. Conformément aux conventions utilisées par le compilateur Gcc, on suppose qu'à l'entrée
de la boucle :
• le
• le
registre R4 pointe sur la chaîne dst
registre R5 pointe sur la chaîne src
_while :
Lb
Sb
Addiu
Addiu
Bne
Nop
r6
r6
r4
r5
r6
,
,
,
,
,
0 (r5 )
0 (r4 )
r4 , 1
r5 , 1
r0 , _while
Dans 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).
1-
En supposant que l’étiquette _while se trouve sur une adresse alignée et que le buffer
d’instructions est vide au début de la boucle, montrer à l’aide d’un schéma simplifié,
l’exécution de la boucle sur la réalisation SS2. Calculer le nombre moyen de cycles par
itération. Calculer le CPI et le CPI-utile.
2-
Pour la réalisation SS2, optimiser ce code en modifiant l’ordre des instructions de manière à
éviter au maximum les cycles perdus. Montrer à l’aide d’un schéma simplifié, l’exécution de
la boucle optimisée sur la réalisation SS2. Calculer le nombre moyen de cycles par itération.
Calculer le CPI et le CPI-utile.
3-
Pour la réalisation SS2, optimiser ce code utilisant la technique Software pipeline. Indiquer
clairement le nombre d’étages et les instructions comprises dans chaque étage. Montrer à
l’aide d’un schéma simplifié, l’exécution de la boucle optimisée sur la réalisation SS2.
Calculer le nombre moyen de cycles par itération. Calculer le CPI et le CPI-utile.
4-
Expliquer pourquoi ne peut-on pas utiliser le déroulement de boucle pour optimiser cette
boucle.
Dans le reste du sujet, on considère le code original de la boucle.
On suppose que la chaîne de caractères source contient 1024 caractères en comptant le caractère de
fin de chaîne. Les adresses des chaînes source et destination sont multiples de 1024.
On souhaite évaluer la performance d’exécution de ce code sur différentes plateforme matérielle.
Sur toutes les plateformes, 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).
On suppose qu'au début de l'exécution de la fonction le cache de données est vide.
Le cache de données a une capacité de 1 Koctets. C'est un cache à correspondance directe (Direct
Mapping) et un bloc du cache contient 16 octets. Le temps d’accès au cache est de 1 cycle en cas de
hit.
Le cache de données est relié à la mémoire primaire à travers un bus. A chaque cycle, on peut
transférer 4 octets (1 mots) sur le bus. Pour initialiser le transfert, il faut, en moyenne, 8 cycles.
Ainsi, en cas de Miss dans le cache, il faut 1 cycle pour détecter le Miss, puis 12 cycles ( 8 +1 ×
16
4
) pour transférer le bloc manquant. Après le chargement du bloc, il faut encore 1 cycle pour mettre à
jour le cache et 1 cycle supplémentaire pour répondre au processeur.
Sur la première plateforme, on utilise un cache de données Write Through qui dispose d'un buffer
d'écritures postées de 1 place. Si le buffer est vide, une écriture coûte 1 cycle, le temps nécessaire
pour écrire dans le buffer. Le buffer est vidé à la fin de la transaction sur le bus. Il faut donc 9 (
8 +1 ×
4
) cycles pour vider le buffer.
4
5-
Le cache de données contient combien d'emplacements ? Combien d'ensembles ?
6-
Combien de Miss se produisent-ils lors de l’exécution de la fonction ?
Calculer le nombre de cycles supplémentaires par itération dus aux lectures.
Calculer le nombre de 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.
7-
Peut-on obtenir une meilleure performance, si l’on remplace le cache Direct Mapping par un
cache Set Associative de même taille ? Expliquer pourquoi ?
Sur la seconde plateforme, on 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.
8-
Du point de vue du processeur, combien de cycles dure l’accès à une donnée (distinguer 3
cas) ?
9-
Combien de Miss se produisent-ils lors l’exécution de la fonction (distinguer 2 types de
Miss) ? Calculer le nombre de cycles supplémentaires par itération.
En déduire le nombre moyen de cycles par itération, le CPI et le CPI-utile.
10-
Pour améliorer les performances, on décide de placer la chaîne de caractères destination sur
une adresse d telle que : d modulo 1024 = 16.
Combien de Miss se produisent-ils lors l’exécution de la fonction (distinguer 2 types de
Miss) ? Calculer le nombre de cycles supplémentaires par itération.
En déduire le nombre moyen de cycles par itération, le CPI et le CPI-utile.
11-
Dans une autre expérience, on décide de placer la chaîne de caractères destination sur une
adresse d telle que : d modulo 1024 = 1008.
Combien de Miss se produisent-ils lors l’exécution de la fonction (distinguer 2 types de
Miss) ? Calculer le nombre de cycles supplémentaires par itération.
En déduire le nombre moyen de cycles par itération, le CPI et le CPI-utile.
Sur la troisième plateforme, on utilise un cache de données Write Back partiellement
associative de degré 2 utilisant une stratégie de remplacement LRU.
12-
Les adresses des chaînes de caractères source et destination sont multiple de 1024.
Combien de Miss se produisent-ils lors l’exécution de la fonction (distinguer 2 types de
Miss) ? Calculer le nombre de cycles supplémentaires par itération.
En déduire le nombre moyen de cycles par itération, le CPI et le CPI-utile.
Téléchargement