Architecture MIPS - Free
2.3.4 Les catégories d'instructions .... Il y a 57 instructions, de 3 types différents :
... Supposons que l'on désire copier 0x87654321 dans le registre R1 : addi R1 ...
part of the document
Architecture MIPS
TABLE DES MATIERES
TOC \o "1-4" 1 Introduction PAGEREF _Toc6572989 \h 3
2 Architecture externe PAGEREF _Toc6572990 \h 3
2.1 Caractéristiques PAGEREF _Toc6572991 \h 3
2.2 Conception du jeu d'instructions d'un processeur PAGEREF _Toc6572992 \h 4
2.3 Les instructions PAGEREF _Toc6572993 \h 5
2.3.1 Register Type PAGEREF _Toc6572994 \h 5
2.3.2 Immediate Type PAGEREF _Toc6572995 \h 5
2.3.3 Jump Type PAGEREF _Toc6572996 \h 6
2.3.4 Les catégories d'instructions PAGEREF _Toc6572997 \h 6
2.3.5 Les instructions d'accès mémoire PAGEREF _Toc6572998 \h 7
2.4 Exercice PAGEREF _Toc6572999 \h 8
2.5 Exercice PAGEREF _Toc6573000 \h 9
3 Architecture interne PAGEREF _Toc6573001 \h 10
3.1 Pipeline PAGEREF _Toc6573002 \h 10
3.1.1 Introduction PAGEREF _Toc6573003 \h 10
3.1.2 Vue simplifiée du pipeline PAGEREF _Toc6573004 \h 11
3.1.3 La mémoire PAGEREF _Toc6573005 \h 12
3.1.4 Règles du pipeline PAGEREF _Toc6573006 \h 12
3.1.5 Vue détaillée du pipeline PAGEREF _Toc6573007 \h 12
3.1.6 Exercices PAGEREF _Toc6573008 \h 13
3.1.7 Problèmes lié au pipeline PAGEREF _Toc6573009 \h 16
3.1.7.1 Premier problème PAGEREF _Toc6573010 \h 16
3.1.7.2 Deuxième problème PAGEREF _Toc6573011 \h 17
3.1.8 Exercice PAGEREF _Toc6573012 \h 19
3.1.9 Exercice PAGEREF _Toc6573013 \h 20
3.2 Optimisations du compilateur PAGEREF _Toc6573014 \h 21
3.2.1 Optimisations simples PAGEREF _Toc6573015 \h 21
3.2.2 Optimisation "Software Pipeline" PAGEREF _Toc6573016 \h 23
3.2.3 Optimisation "déroulement de boucle" PAGEREF _Toc6573017 \h 24
3.2.4 Exercice PAGEREF _Toc6573018 \h 24
3.3 Super Pipelines PAGEREF _Toc6573019 \h 26
3.3.1 Pipeline détaillé PAGEREF _Toc6573020 \h 27
3.3.2 Les bypass PAGEREF _Toc6573021 \h 28
3.3.3 Application PAGEREF _Toc6573022 \h 29
3.4 Super scalaires à exécution ordonnée PAGEREF _Toc6573023 \h 31
3.4.1 Règles à respecter PAGEREF _Toc6573024 \h 32
3.4.2 Exercice PAGEREF _Toc6573025 \h 32
4 Pi-Bus PAGEREF _Toc6573026 \h 34
5 La mémoire PAGEREF _Toc6573027 \h 35
5.1 Les caches PAGEREF _Toc6573028 \h 36
Introduction
MIPS : Microprocessor without Interlocked Pipeline Stages
En 1975, IBM invente le RISC.
EN 1981, John Hennessy (Stanford) invente un processeur RISC sans inter blocage entre les pipelines, et en 1984 invente sa boite : MIPS Computer Systems.
En 1985 il sort le premier processeur MIPS : le R2000.
En 1988, il sort le R3000 Silicon Graphics.
1991 : R4000 64 bits.
1992 : Silicon Graphics (SGI) rachète MIPS, et changent le nom : MIPS Technologies.
1994 : R8000, processeur super scalaire.
1997 : 48 millions de MIPS vendus (plus que le motorola 68000).
1999 : création de 2 licences différentes :
32-bits MIPS (MIPS32)
64-bits MIPS (MIPS64)
Ces licences ont été achetées entre autres par Sony, Nec, Toshiba, Philips.
Architecture externe
Caractéristiques
L'architecture externe est l'interface entre le processeur et le programmeur. Ce cours sera plus orienté vers l'architecture interne.
Une architecture externe est composée de :
registres visibles
set d'instructions
adressage
système d'interruptions / exceptions
Caractéristiques du R3000 :
32 bits
little endian
32 registres
R0 toujours égal à 0 : Trash Register
R31 : Link Register
R2 : valeur de retour d'un sous programme
R29 : frame pointer
R30 : global variables area pointer
Registres spéciaux
Hi et Lo : registres utilisés pour la multiplication et la division
SR : Status Register 2 modes :
USER
SYSTEM
CAUSE : contient la cause de l'interruption / exception
EPC : Exception PC (Program Counter) : adresse de l'instruction qui a causé l'exception
BAR : Bad Address Register
RISC : Reduced Instruction Set Computer
(Reject Inportant Stuff into Compiler ( branle tout dans le compilo)
( MyCure
CISC vs RISC :
exemple :
int chiche, a, b;
chiche = a + b;
CISC :
add [chiche], [a], [b]
RISC :
lw R3, [a]
lw R4, [b]
add R5, R3, R4
sw R5, [chiche]
2 caractéristiques principales d'un processeur :
Le jeu d'instruction
Le schéma d'exécution
Conception du jeu d'instructions d'un processeur
Un jeu d'instructions n'est pas construit par hasard. Il y a 2 règles à connaître :
Mix : Ensemble de statistiques sur la fréquence d'utilisation des instructions. Les Mix permettent aux ceoncepteurs de processeur de savoir quels instructions doivent être implémentée et lesquelles peuvent être évitées (et réalisée avec plusieurs instructions).
Amdhal Rule : Le gain réel dépend du coût de la mise en place de l'instruction dans le processeur : Gain réel = Gain x Fréquence d'utilisation
Il y a 2 caractéristiques qui font qu'un processeur est performant :
nombre de cycles par instruction (CPI ou CPIu (utiles))
Fréquence d'horloge F
Performance : P = F / CPI
But du processeur MIPS : CPI = 1
Question : Pourquoi l'instruction Sll Rd, Rs, I est une instruction de type registre ?
Réponse : Parce que grâce aux opcodes étendus, on peut avoir plus d'instruction de type registre par rapport aux instructions de type immédiat.
Raisons du choix d'une instruction :
les opcodes coûtent cher
beaucoup d'instructions sont inutiles car remplaçables par d'autres
MIX et la loi d'Amhdal définissent quelles sont les instructions à inclure dans le processeur.
Les instructions
Il y a 57 instructions, de 3 types différents :
R : Register to Register Register Type
I : Accès mémoire, branchements Immediate Type
J : Instructions de sauts (non-conditionnels) : Jump Type
Register Type
OpcodeRsRtRdShamFunc655556
Opcode : numéro de l'instruction
Sham : Shift Amount : spécifie le nombre de décalage
Rs : Source
Rt : Alternatif
Rd : Destination
Exemple : add R3, R4, R5
On aurait R3 dans Rd, R4 dans Rs, R5 dans Rt.
De même avec addu, srl, sll, etc.
Immediate Type
OpcodeRsRtImmed65516
Opcode : numéro de l'instruction
Rs : Source
Rt : Alternatif
Immed : valeur immédiate
Exemple : addi R4, R3, 8
On aurait R4 dans Rt, R3 dans Rs, et 8 dans immed.
De même avec addiu, andi, ori, etc.
Jump Type
OpcodeImmed626
Opcode : numéro de l'instruction
Immed : valeur immédiate
Exemple : J immed
Les catégories d'instructions
MIPS divise les instructions en 2 catégories :
les instructions arithmétiques
les instructions logiques
Les instructions arithmétiques gèrent l'overflow. MIPS est composé de 57 instructions (33 instructions arithmétiques et logiques, 12 instructions de branchement, 7 instructions et 5 instructions système).
ANDI : Andi Rt, Rs, I
Rs est sur 32 bits, et I sur 16. L'opération sur les 16 bits de poids fort de Rs se fait avec des 0.
ADDI : Addi Rt, Rs, I
Rs sur 32 bits, I sur 16. Les 16 bits manquants de I sont complétés par le bit de signe de I. L'overflow est géré.
Supposons que l'on désire copier 0x87654321 dans le registre R1 :
addi R1, R0, 0x8765 ~ Lui Rn, Immed (c'est une instruction réelle,
sll R1, R1, 16 pas une macro instruction)
Addi R1, R1, 0x4321
Autre exemple :
Addi R1, R0, 0x4567
Sll R1, R1, 16
Addi R1, R1, 0x89ab
Ici, R1 est sur 32 bits, mais 0x89ab est sur 16 bits, et son bit de signe va être recopié dans les 16 bits de poids fort. Le résultat que l'on va obtenir est :
R1 = 0x45670000 + FFFF89ab
Pour avoir 0x456789ab dans le registre R1, on fait donc :
Addi R1, R0, 0x4567
Sll R1, R1, 16
Ori R1, R1, 0x89ab
Les instructions d'accès mémoire
Les accès mémoire peuvent être fait en byte (8 bits), half-word (16 bits) ou word (32 bits).
Le processeur MIPS est en little endian : les bits de poids faible sont placé au début.
Lh Rt, Immed (R5)
Lb
Lw
Lbu, Lhu, Lwu pour Load Unsigned.
Pour mettre en mémoire : S (Sw, Sh, etc.)
Sauts
J main
OpcodeImmed626
Afin d'aligner les adresses, on ajoute à l'adresse immédiate 2 zéros à la fin.
On peut donc sauter plus loin, car on a réellement 28 bits au lieu de 26.
Jr Rs // Jump to register
Jal Immed // Jump and link ( Link Register
Jalr // Jump and Link register
Beq Rs, Rt, Label
Si Rs == Rt, @suivante = Label
Sinon, @suivante += 4 (une instruction = 4 octets)
Dans le cas d'un branchement réussi, on a :
@ = (@courante) + 4 + (@Label