AccueilđŸ‡«đŸ‡·Chercher

UltraSPARC IIi

L'UltraSPARC IIi, successeur de l'UltraSPARC, est un microprocesseur 64 bits de Sun Microsystems dont la distribution commença en 1997.

Processeur UltraSPARC IIi

L'UltraSPARC IIi est basé sur les spécifications SPARC version 9, et équipe notamment les stations Sun allant de l'Ultra 5 à l'Ultra 60 ainsi que les premiers modÚles de Sunblade.

Principaux blocs fonctionnels

Les principaux composants formant l'UltraSPARC IIi sont :

  • IEU : Integer Execution Unit, effectue les opĂ©rations arithmĂ©tique grĂące Ă  ses 2 ALUs ;
  • FPU : Floating Point Unit, effectue les opĂ©rations arithmĂ©tiques sur des nombres Ă  virgule ;
  • GRU : GRaphic Unit, exĂ©cute les instructions graphiques (voir Jeu d'instructions) ;
  • LSU : Load/Store Unit, accĂšde Ă  la mĂ©moire ;
  • PDU : Prefetch, Prediction and Dispatch Unit, contient la Prefetch queue et la logique pour le groupement des instructions ;
  • I-Cache & D-Cache : caches de donnĂ©es et d'instructions ;
  • I-MMU & D-MMU : Memory Management Unit, traduit les adresses virtuelles

Registres

L'UltraSPARC IIi implĂ©mente la technique de la fenĂȘtre de registres, c'est-Ă -dire qu'il met Ă  disposition de l'utilisateur plusieurs jeux de registres interchangeables.

En plus des 8 registres globaux (%g0 Ă  %g7), qui sont dupliquĂ©s selon le mode de fonctionnement du microprocesseur (4 modes sont disponibles), l'utilisateur a accĂšs Ă  une fenĂȘtre coulissante de 24 registres :

  • les registres d'entrĂ©e (%i0 Ă  %i7), utilisĂ©s pour rĂ©cupĂ©rer les arguments d'une fonction et lire la valeur de retour ;
  • les registres locaux (%l0 Ă  %l7), offrant un stockage pour les variables locales ;
  • les registres de sortie (%o0 Ă  %o7), permettant le passage d'argument Ă  une fonction.

La fenĂȘtre de registres est dite coulissante car dans le prologue d'une fonction, on fait appel Ă  une instruction qui transforme les registres de sortie en registres d'entrĂ©e, et qui libĂšre un nouveau jeu de 16 registres locaux et de sortie. Dans l'Ă©pilogue, on revient Ă  l'ancienne fenĂȘtre, ce qui a pour effet de restaurer les registres locaux et d'entrĂ©e.

L'UltraSPARC IIi offre 8 fenĂȘtres de registres, au-delĂ , c'est au systĂšme d'exploitation d'assurer la sauvegarde des fenĂȘtres prĂ©cĂ©dentes contre l'Ă©crasement. En effet, la fenĂȘtre fonctionne de maniĂšre circulaire : une fois sur la derniĂšre fenĂȘtre, on reprend Ă  la premiĂšre.

La FPU offre 32 registres pouvant contenir soit des flottants simple précision soit des flottants double précision (IEEE 754).

Pipeline

Le pipeline de l'UltraSPARC IIi est composé de 9 étages :

  • fetch : lit un maximum de 4 instructions depuis le I-Cache ;
  • decode : prĂ©-dĂ©code et identifie les instructions ;
  • group : choisit les instructions Ă  exĂ©cuter (voir description ci-dessous) ;
  • execute : exĂ©cute les instructions arithmĂ©tiques (Ă  l'aide des 2 ALUs) ;
  • cache : effectue la traduction d'adresse (voir UnitĂ© de gestion de la mĂ©moire) ;
  • N1 : rĂ©solution des caches-misses au niveau du D-Cache ;
  • N2 : accĂšs mĂ©moire ;
  • N3 : rĂ©solution des traps ;
  • write-back : Ă©criture des rĂ©sultats finaux dans les registres.

L'UltraSPARC IIi est superscalaire de degré 4, c'est-à-dire qu'il peut exécuter selon certaines contraintes 4 instructions simultanément. Parmi ces contraintes :

  • la prĂ©sence de 2 ALUs permet l'exĂ©cution simultanĂ©e de deux instructions arithmĂ©tiques au maximum par groupe ;
  • la FPU et la GRU permettent l'exĂ©cution d'un maximum de deux instructions simultanĂ©es, selon la nature des instructions dont il est question ;
  • une instruction de branchement peut ĂȘtre exĂ©cutĂ©e, seulement si elle est la derniĂšre du groupe d'instructions ;
  • une instruction d'accĂšs mĂ©moire peut ĂȘtre exĂ©cutĂ©e par groupe.

Dans le cas des instructions FPU ou des instructions graphiques, la fin du pipeline diffĂšre :

  • register : accĂšde aux registres flottants ;
  • X1 : dĂ©but de l'exĂ©cution des instructions ;
  • X2 : continue l'exĂ©cution ;
  • X3 : fin de l'exĂ©cution ;
  • write-back : idem que dans le pipeline classique.

Chaque instruction de branchement est suivi d'un delay slot, c'est-Ă -dire une instruction qui sera systĂ©matiquement exĂ©cutĂ©e mĂȘme si le branchement est pris. Il est possible d'annuler l'effet du delay slot, en utilisant des instructions particuliĂšres.

Caches

  • Le cache d'instructions (I-Cache) est un cache set associative de degrĂ© 2, contenant des blocs de 32 octets. Il y a 16 kilooctets au total.
  • Le cache de donnĂ©es (D-Cache) est un cache direct mapped avec 2 sous blocs de 16 octets par ligne de cache. La politique de write-hit est de type write-through. Le D-Cache mesure 16 kilooctets, Ă  l'instar de l'I-Cache.

Jeu d'instructions

Le jeu d'instructions de l'UltraSPARC IIi est le Visual Instruction Set de Sun. Il offre :

  • les instructions arithmĂ©tiques et logiques classiques ;
  • les comparaisons et branchements ;
  • les accĂšs Ă  la mĂ©moire ;
  • des instructions SIMD pour accĂ©lĂ©rer les traitements graphiques et sonores.

Exemple en assembleur

La fonction suivante calcule la somme des entiers 64 bits d'un tableau.

sum:
	save %sp, -192, %sp	/* sauve l'ancienne fenĂȘtre de registre	*/
				/* Ă  cet instant :			     */
				/* %i0 = nombre de cases du tableau	*/
				/* %i1 = adresse du tableau		*/
	sllx %i0, 3, %l0	/* calcule la taille du tableau en mémoire	*/
				/* il s'agit d'une multiplication par 8		*/
				/* (décalage de 3 bits vers la gauche)		*/
	add %i1, %l0, %l0	/* calcule l'adresse de fin du tableau dans %l0	*/
	mov %i1, %l1		/* copie l'adresse du tableau dans %l1		*/
	clr %i0			/* on utilise le registre %i0 pour la somme	*/
				/* car registre est le registre de retour	*/
	/* maintenant, on va parcourir les adresses de %l1 (début du tableau) à	*/
	/* %l0 (fin du tableau) et additionner les valeurs			*/
.loop:	ldx [%l1], %l2		/* lit la valeur courante du tableau dans %l2	*/
	add %l1, 8, %l1		/* avance dans le tableau d'une case (8 octets)	*/
	cmp %l1, %l0		/* compare l'adresse courante Ă  l'adresse de fin*/
	blt .loop		/* si %l1 < %l0, saute au label loop		   */
	 add %i0, %l2, %i0	/* additionne la valeur Ă  la somme		*/
	ret			/* restaure l'ancienne fenĂȘtre de registre	*/
	 restore		/* instruction en delay-slot			*/

On observe que l'addition juste aprĂšs le branchement est exĂ©cutĂ©e mĂȘme quand le branchement est pris. Mettre une instruction utile dans le delay slot permet ici de gagner un cycle par itĂ©ration.

Unité de gestion de la mémoire

La MMU de l'UltraSPARC IIi est formée par la LSU (Load/Store Unit) et les Translation Lookaside Buffers (TLB) : I-TLB et D-TLB.

La gestion de la mémoire virtuelle fait appel à deux TLB de 64 entrées de type full associative. Chaque entrée dans un TLB est divisée en 2 :

  • le tag : contient l'adresse virtuelle, le flag Global et le numĂ©ro de contexte ;
  • les donnĂ©es : prĂ©cisent l'adresse physique, la taille de la page et les permissions.

Lorsqu'une adresse doit ĂȘtre traduite, les tags du TLB correspondant (I-TLB pour la lecture d'instructions, D-TLB pour les accĂšs mĂ©moire faits par la LSU), est parcouru Ă  la recherche d'une adresse correspondante. Si une telle entrĂ©e est trouvĂ©e, le numĂ©ro de contexte est alors comparĂ© au numĂ©ro de contexte courant, ou si la page est globale, alors cette comparaison n'est pas faite. Une fois l'entrĂ©e identifiĂ©e, la partie donnĂ©es est lue et l'adresse est traduite.

En cas de TLB-miss (c'est-à-dire si aucune entrée ne convient), le microprocesseur entame une recherche dans un cache placé en mémoire par l'utilisateur : le Translation Storage Buffer (TSB). Cette recherche est évidemment plus longue car il y a de nombreux accÚs mémoire. Cependant, l'utilisation du TSB est optionnelle.

Enfin, s'il n'existe aucune entrĂ©e ni dans le TLB ni dans le TSB, une exception est dĂ©clenchĂ©e. De la mĂȘme maniĂšre, s'il existe une entrĂ©e mais que les permissions sont insuffisantes, une exception est aussi dĂ©clenchĂ©e. C'est alors au systĂšme d'exploitation :

  • soit de remplir le TLB avec l'entrĂ©e manquante ;
  • soit de changer les permissions pour autoriser l'opĂ©rations ;
  • ou encore d'avertir l'utilisateur d'une erreur irrĂ©cupĂ©rable (Segmentation fault sous UNIX) et d'interrompre le programme.

Bien entendu, il faut trĂšs soigneusement maintenir les TLB, afin d'optimiser les performances et d'Ă©viter les plantages.

Il est possible de contourner le mécanisme de traduction d'adresse, en utilisant 2 identifiants d'espace d'adressage spécifiques (Bypass ASIs). Cette opération est cependant réservée au superviseur.

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.