mercredi 14 mars 2007

cours d'architecture a Polythechnique

Les buts de ce cours sont (1) de comprendre en détail la structure d'un ordinateur et particulièrement celle d'un processeur qui en est l'élément principal, (2) de comprendre comment un programme écrit dans un langage de haut niveau est exécuté sur un ordinateur, et (3) de comprendre les facteurs qui déterminent l'évolution des processeurs et ordinateurs. On étudiera notamment les problèmes que posent les architectures actuelles, et on abordera les évolutions possibles des architectures à moyen et long terme.

Retrouvez la suite ici : http://www.lri.fr/~temam/enseignement/x/

lundi 12 mars 2007

emulateur processeur

Pour tout comprendre sur les processeurs, découvrez ce simulateur :

The aim of this project is to develop a computer application capable of simulating a RISC processor's behavior and showing each step of execution of an instruction among a reduced subset. The components represented are : the memory, the datapath and its control unit. The processor we have chosen is a simplified MIPS-R2000-like processor.
The program is written in C++ using the GTK+ library and should therefore work on every platform for which a distribution of this library exists.


http://processor.emulator.free.fr/

mardi 20 février 2007

Processeur VLIW

VLIW, initiales de Very Long Instruction Word en anglais, dénote une famille d'ordinateurs dotés d'un processeur à mot d'instruction très long (couramment supérieur à 128 bits).

Sommaire
1 Principe
1.1 Exemple
1.2 Pipeline interne
2 Implémentations commerciales
3 Historique
4 Références
4.1 Liens internes
4.2 Liens externes

Principe
Sur ces processeurs, chaque instruction peut faire 128, 256 bits de long, voire plus. Sont codés à l'intérieur de ces instructions les opérations à effectuer par les différentes unités de calcul disponible dans l'unité centrale.
Il est de la responsabilité du compilateur de générer un code qui prend en compte la disponibilités des ressources et ne provoque pas de problèmes matériel lors de son exécution.
Un mot VLIW est parfois appelé un bundle, selon l'architecture. Chaque bundle peut contenir plusieurs instructions. Ces instructions sont positionnées à un certain emplacement du bundle : un slot. En général chaque slot correspond à un type d'instruction, c'est-à-dire que le compilateur ne peut pas affecter à un slot dédié aux instructions arithmétiques entières une multiplication flottante, par exemple.

Exemple
Prenons un exemple de source en assembleur VLIW pour illustrer le problème d'affectation des ressources. Le processeur pour lequel on génère du code n'a que 4 unités : une unité de calcul sur des entiers, une unité flottante, une unité de chargement/rangement (accès mémoire), et une unité de branchement (un mot VLIW ne pourra contenir plus de 4 instructions) :
Code source :...
I1 ADD R1, R1, -2
I2 FMUL R2, R1, 10
I3 STORE R3, #100
I4 JE R2, FinCode
I5 LOAD R4, R1(4)
...
On voit ici une dépendance de type RAW (Read After Write, lecture après écriture), qui empêche d'exécuter I2 en même temps que I1. En revanche on peut paralléliser I1 et I3, car il n'y a pas de dépendance et parce qu'elles n'utilisent pas les mêmes ressources matérielles (l'unité entière pour I1 et l'unité de branchement pour I2).
Le compilateur produira le mot machine suivant :
L'exécution de ce mot se fera de la manière suivante :
Le fait que le processeur ne réorganise pas les données qu'il va exécuter le caractérise comme étant un processeur in-order (dans l'ordre).
Le compilateur a donc la charge d'organiser correctement les instructions parmi les bundles, tout en respectant les types de dépendances habituelles (aléa de donnée, etc.) qui sont normalement gérées au niveau matériel par les architectures classiques (en général via l'algorithme de Tomasulo).
Outre les instructions classiques (celles qui seront exécutées), le compilateur doit « remplir les slots vides du bundle » pour que chaque mot ait la taille idoine (128, 256, 384 bits). Pour ce faire il y place des instructions ne faisant rien (NOP, pour No Operation), comblant ainsi les emplacements vides.
La faible densité de code résultant de ces instructions très longue peut être compensée par une décompression à la volée du code au moment de son exécution.

Lire la suite : http://fr.wikipedia.org/wiki/Processeur_VLIW

mardi 13 février 2007

Architecture RISC

Reduced instruction set computer
Un article de Wikipédia, l'encyclopédie libre.

Le microprocesseur à jeu d'instruction réduit ou reduced instruction-set computer en anglais est une architecture matérielle de microprocesseurs. On l'a opposé à la fin des années 1980 et au début des années 1990 à l'architecture CISC (complex instruction-set computer). La sortie d'architectures hybrides comme le Pentium (CISC émulé par du RISC) a mis fin par disparition de repères à cette guerre qui était devenue bien plus marketing que technique vers 1990, les techniques ayant évolué de part et d'autre et chacune comparant ses procédés à ceux de l'autre... six ans plus tôt.

Sommaire
1 Principe
1.1 Pénalité
1.2 Avantages
2 Historique
3 Performances comparées CISC/RISC
4 Positionnement

Principe
L'idée d'origine provient de l'analyse des séquences de codes qui montrait que la grande majorité des instructions disponibles étaient très peu utilisées. Ainsi, seul un jeu très réduit d'instructions était principalement utilisé dans les programmes. C'est pourquoi l'architecture RISC fait le choix de limiter le jeu d'instructions à seulement quelques unes, imposant, en contrepartie, à toutes, un nombre identique de cycles pour s'exécuter. De cette manière, il est possible de débuter une nouvelle instruction à chaque cycle d'horloge: ceci constitue le « pipeline ». L'avantage de cette technique est que désormais, le processeur se comporte comme s'il y avait une instruction exécutée par cycle d'horloge. De plus, la division de chaque instruction en plusieurs étapes autorise une fréquence d'horloge plus grande puisque la profondeur combinatoire entre deux registres est diminuée. Ces deux caractéristiques ont pour conséquence une division du temps d'exécution pour toutes les instructions de base.

Pénalité
Cela se paye au prix d'une certaine diminution de lisibilité du code gênante si l'on programme en assembleur et surtout si on l'optimise : l'instruction MVC (MoVe Character) du Système 360 restait tout de même plus lisible que la séquence d'instructions faisant la même chose dans une machine RISC. Mais pour qui la codait strncpy() en langage C, il n'y avait plus aucune différence. Et en temps d'exécution, le code C optimisé se montrait en général plus performant en vitesse pure grâce à des astuces d'usage de l'effet pipeline par le compilateur.

Avantages
Du fait que chaque instruction était simple, le décodage et l'exécution par le processeur devaient être très rapides, idéalement en un seul cycle, ce qui était précisément le cas du Motorola 6800. Le succès de l'architecture RISC a tenu à deux facteurs :
la mémoire avait baissé de prix à un point tel qu'y concentrer des instructions compliquées perdait de sa rentabilité,
les temps d'accès de cette mémoire étaient devenus très faibles par rapport au temps de traitement d'une instruction complexe. Dans ces conditions, la mémoire passait l'essentiel de son temps à attendre le processeur.
C'est aujourd'hui (2004) l'inverse, raison pour laquelle on place des antémémoires (caches) un peu partout, y compris dans les machines RISC qui en ont plus souvent deux (données, instructions) qu'une seule.

Suite de l'article sur : http://fr.wikipedia.org/wiki/Reduced_instruction_set_computer


http://www.spoonylife.com/

jeudi 8 février 2007

Architecture CISC

Complex instruction set computer
Un article de Wikipédia, l'encyclopédie libre.

Un microprocesseur à jeu d'instruction étendu, ou complex instruction set computer (CISC) en anglais, désigne un microprocesseur possédant un jeu d'instructions comprenant de très nombreuses instructions mixées à des modes d'adressages complexes.
L'architecture CISC est opposée à l'architecture RISC (Reduced Instruction-Set Computer).

Avantages
L'empreinte mémoire du code est beaucoup plus dense (facteur deux entre de l'ARM thumb et le x86), ce qui est intéressant pour minimiser la taille du cache instruction.
Possibilité de microprogrammation, donc de corriger le jeu d'instructions (cela peut être utile pour corriger des bugs).
Permet d'utiliser des instructions très complexes non (ou mal) gérées par les compilateurs mais très rapides (ex: instructions SIMD).

Défauts
Le microprocesseur est plus compliqué à accélérer (problème pour pipeliner le moteur d'exécution).
Le processeur est globalement plus complexe qu'un processeur RISC.
Les compilateurs ont des difficultés à générer des instructions complexes.

Processeur de cette famille
Les x86
Les 68000
Le s390 (pour les mainframes d'IBM)
Le VAX
Récupérée de « http://fr.wikipedia.org/wiki/Complex_instruction_set_computer »

mardi 6 février 2007

Structure d'un processeur

Un processeur comporte trois classe de composants:
des espaces de stockage, source des instructions et de leurs opérandes et destination des résultats;
des unités fonctionnelles, effectuant les manipulations sur les opérandes et fournissant les résultats;
un contrôleur, lisant les instructions et coordonnant leur exécution par les autres composants.

Espaces de stockagePour diverses raisons, les processeurs ont plusieurs espaces de stockage.

Espace de travail C'est l'ensemble des emplacements facilement spécifiables qui contiennent temporairement les opérandes et les résultats des opérations. Ces emplacements sont souvent appelés registres.
Il n'est absolument pas nécessaire que les registres soient homogènes bien qu'on puisse souvent grouper les registres en classes, de sorte que les registres d'une classe peuvent être utilisés à la place de n'importe quel autre registre de la même classe. Mais il n'est pas rare qu'une classe ne comporte qu'un seul registre.
Les architectures ont quasiment toutes au moins deux classes de registres: une pour stocker les valeurs entières, une pour stocker les nombres représentés en virgule flottante. Mais souvent, l'espace de travail comporte des registres ayant des fonctions particulières.
Un accumulateur
est un registre servant de source implicite à la plupart des instructions et contenant le résultat après leur exécution.
Les registres d'index
sont des registres servant au calcul d'adresse (voir plus loin).
Un pointeur de pile
indiquant l'adresse du sommet d'une pile gérée par le processeur.
Un frame pointer
servant à accéder aux données locales de la routine en cours d'exécution.
Certains registres ont un comportement particulier: ils informent de l'état du processeur ou contiennent des informations à propos des dernières opérations effectuées (par exemple un indicateur indiquant si le dernier résultat était nul ou pas). Parmi ces registres particuliers on trouve souvent:
Le compteur ordinal (program counter, instruction pointer)
indiquant l'adresse de l'instruction en cours d'exécution ou de la prochaine instruction à exécuter;
le mot d'état
regroupant les informations les plus importantes sur l'état du processeur.

Espace mémoire
Au contraire de l'espace de travail, un espace mémoire apparait comme un ensemble homogène d'emplacements, chacun de ceux-ci étant spécifié par son adresse.
La plupart des processeurs n'ont qu'un espace mémoire, mais certains en ont plusieurs (par exemple un microcontrôleur peut avoir un espace mémoire sur le circuit et un espace mémoire à l'extérieur de celui-ci).
Parfois un espace mémoire peut être plongé dans un autre, c'est à dire qu'un même emplacement peut être accessible à une adresse d'un espace mémoire donné ou à une autre adresse d'un autre espace mémoire. C'est parfois le cas pour tout ou partie des registres de l'espace de travail.
Les modes d'adressage du processeur sont les différentes manières dont on peut spécifier les opérandes d'une instruction. Parmi les modes d'adressage possibles, citons:
l'adressage implicite
l'opérande n'est pas spécifiée dans l'instruction; elle est soit
toujours la même (pour une instruction d'incrémentation par exemple, on peut considérer qu'une opérande est toujours la constante 1), soit elle se trouve dans un registre fixé (si beaucoup d'instructions utilisent implicitement un même registre, celui-ci est nommé l'accumulateur), soit son adresse se trouve dans un registre fixé (par exemple le pointeur de pile).
l'adressage immédiat
la valeur de l'opérande est donnée directement dans l'instruction;
l'adressage direct ou absolu
l'adresse de l'opérande est donnée directement dans l'instruction;
l'adressage par registre
l'opérande se trouve dans un registre donné dans l'instruction;
l'adressage indirect par registre
l'adresse de l'opérande se trouve dans un registre;
l'adressage indirect
l'adresse de l'opérande se trouve dans un emplacement mémoire dont l'adresse est elle donnée dans l'instruction;
l'adressage indexé
l'adresse de l'opérande est formée en additionnant le contenu d'un ou de deux registres et d'une constante.

Entrée sortie
Pour le programmeur, la gestion des entrées sorties se fait souvent exactement comme si on accédait à un espace de stockage particulier. Suivant les architectures il apparait soit comme des registres (c'est souvent le cas dans les microcontrôleurs), soit comme un espace mémoire (auquel cas les modes d'adressage sont souvent plus réduits que dans les espaces mémoire normaux). Parfois, les entrées sorties se font en accédant simplement à des adresses particulières dans l'espace mémoire normal.

Lire l'article complet sur : http://fr.wikipedia.org/wiki/Architecture_des_processeurs

lundi 5 février 2007

Architecture

L'architecture d'un processeur est l'agencement de ses composants ; cet agencement est fait en vue d'une tâche ou d'un ensemble de tâches précises prévue par le concepteur.
Savoir qu'un processeur a une instruction add qui fait une addition entre deux registres et met le résultat dans un troisième concerne l'architecture du processeur.
L'implémentation ou micro-architecture est l'organisation logique des flux de données et du contrôle de ceux-ci.
Savoir qu'un processeur a deux unités arithmétiques capables d'exécuter cette instruction concerne la micro-architecture.
La réalisation est la concrétisation matérielle de l'implémentation.
Savoir que ces unités arithmétiques sont réalisées dans une technologie CMOS avec trois niveaux de métaux et une finesse de gravure de 130 nanomètres concerne la réalisation.
Pour une architecture donnée, on peut avoir plusieurs implémentations et une implémentation donnée peut servir de base à plusieurs réalisations. Par exemple l'architecture System 360 d'IBM a été disponible dès le départ en cinq implémentations différentes ayant naturellement des performances et un coût différent (c'est d'ailleurs dans le contexte de la définition de cette architecture que la nomenclature ci-dessus a été rafinée) et de nos jours les microprocesseurs d'Intel et d'AMD fournissent de nombreux exemples des deux genres de déclinaison.
Naturellement les interactions entre les trois niveaux sont complexes. Les contraintes de réalisation limitent les choix micro-architecturaux et le désir de pouvoir choisir une implémentation donnée influence la définition de l'architecture. Si les avantages de la compatibilité forcent à vouloir garder l'architecture constante, vouloir avoir une implémentation et une réalisation efficace pousse vers une évolution, soit par extension compatible (ajout d'instructions par exemple), soit en précisant des zones floues ou même en invalidant ce qui autrefois était autorisé.

lire la suite : http://fr.wikipedia.org/wiki/Architecture_des_processeurs