! INSA-3IF Architecture des Ordinateurs! Séance 4! Christian Wolf,! INSA-Lyon, Dép. IF! # 1 C. Wolf Au Menu! CM1! ISA : Introduction. Jeux d’instructions, assembleur.! TD! La « Micromachine » : réalisation d’un processeur simple sur papier! CM2! ISA : Encodage; Histoire! TP! Réalisation de la micromachine sous Logicworks! CM3! Chemin de données d’un CPU RISC.! Parallélisme des instructions! CM4! CPU super-scalaires, multi-threading! Retour sur les ISA/architectures! CM5! Hiérarchie mémoire! TP! (Florent De Dinechin)! Prise en main du contrôleur MSP 430 CM6! Les GPU ! TD! Micromachine sur papier : les interruptions TP! MSP 430 : pile, timer, interruptions # 2 C. Wolf Sommaire de la séance! Simultaneous Multithreading Time Processeurs multi-scalaires, multithreads! ! Maximum utilization of function units by independent operations ! ARM : architecture! ! ! ! X86 : ISA + architecture! ! # 3 C. Wolf Après le parallélisme des instructions! Question : comment obtenir encore plus de performance pour un seule et unique thread, c.à.d. avec un seul cœur?! ! ! Pipeline classique (« processeur scalaire ») :! Une instruction peut terminer par cycle d’horloge (dans le meilleur des cas).! IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB # 4 C. Wolf Processeur super-scalaire! Plusieurs instructions peuvent terminer par cycle d’horloge (dans le meilleur des cas).! Pour x86 : depuis 1993 (Intel Pentium P5)! IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB # 5 C. Wolf Processeur super-scalaire! Attention :! - Il s’agit toujours d’un seul cœur!! - Il s’agit toujours d’un seul thread!! - Les instructions sont lues de manière séquentielle! - Le CPU vérifie les dépendances entre instructions! IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB # 6 C. Wolf Les figures en bleu sont pris de : EV8: The Post-Ultimate Alpha Dr. Joel Emer Intel Fellow Intel Architecture Group Intel Corporation # 7 C. Wolf Processeur super-scalaire! Instruction Issue Time Reduced function unit utilization due to dependencies # 8 C. Wolf Processeur super-scalaire! Superscalar Issue Time Superscalar leads to more performance, but lower utilization # 9 C. Wolf Processeur multi-cœur! Chip Multiprocessor Time Limited utilization when only running one thread # 10 C. Wolf Exécution dans le désordre! Objectif : changer l’ordre d’exécution des instructions pour maximiser l’utilisation des unités de calcul (et donc le débit)! Phases:! - Instruction Fetch! - Ajout des instruction dans une file d’attente! - Une instruction attend que les opérants sont disponibles. Elle peut partir plus tôt que son ordre « compilé ».! - Envoi vers une unité de calcul! - Ajout des résultats dans une file d’attente! - Ecriture des registres …. dans le bon ordre!! # 11 C. Wolf Exécution dans le désordre! - Chaque unité de calcul dispose de stations de réservations (SR) contenant ! – les instructions! – Les dépendances vers registres …. ou vers des résultats d’autres SR! Instruc7on Instruc7on Instruc7on Unitédecalcul Instruc7on Instruc7on Instruc7on Instruc7on Unitédecalcul Instruc7on # 12 C. Wolf Basic Out-of-order Pipeline Fetch Decode/ Map Queue Reg Read Execute Dcache/ Store Buffer Reg Write Retire PC Register Map Regs Dcache Regs Icache Thread-blind # 13 C. Wolf Exécution dans le désordre! Gain de performances :! - Quand les pipelines sont profonds! - Quand les différences entre fréquence horloge et délai mémoire sont grandes (>100 cycle à l’heure actuelle!)! Les attentes sont « masquées » par l’exécution d’autres instructions.! ! File d’attente des résultats : nécessaire pour ! - Garder la cohérence des résultats! - Pour gérer la précision des interruptions! # 14 C. Wolf Exécution de plusieurs threads! Variante classique : 1 cœur, 1 thread exécuté dans un instant.! Si l’OS exécute plusieurs threads, le processeur doit maintenir une « illusion » que chaque thread dispose d’un processeur entier à lui tout seul.! Notion du changement de contexte (basculement d’un thread à un autre) :! - Sauvegarde du contexte (registres, PC, pointeur pile etc.)! - Chargement du contexte du nouveau thread! ! Lent!! ! # 15 C. Wolf Simultaneous multithreading! Support dans le processeur pour plusieurs threads (toujours dans un seul cœur!)! A chaque instant, le pipeline peut contenir des instructions de plusieurs threads.! Nécessite de garder le support matériel pour plusieurs threads :! - PC! - Banc de registres! - Pointeurs pile ! - Etc.! Terminologie Intel-x86 : « Hyper-threading ».! ! # 16 C. Wolf Simultaneous Multithreading Time Maximum utilization of function units by independent operations # 17 C. Wolf SMT Pipeline Fetch Decode/ Map Queue Reg Read Execute Dcache/ Store Buffer Reg Write Retire PC Register Map Regs Dcache Regs Icache # 18 C. Wolf Processeurs multi-coeur! Chaque cœur est indépendant. ! Chaque cœur peut être réalisé de manière super-scalaire avec SMT (symmetric multi-threading).! Caches peuvent être partagés …. ou pas! ! Intel i7! IBM Power 8 (2014)! # 19 C. Wolf Processeurs hyper-cœur ! Intel Xeon-Phi! # 20 C. Wolf Xeon-Phi! # 21 C. Wolf Sommaire de la séance! Simultaneous Multithreading Time Processeurs multi-scalaires, multithreads! ! Maximum utilization of function units by independent operations ! ARM : architecture! ! ! ! X86 : ISA + architecture! ! # 22 C. Wolf ARM A8! - Processeur super-scalaire : 2 instructions par cycle d’horloge.! - Exécution dans l’ordre! - Pipeline de 13 cycles! - Prédiction dynamique de branchements par deux buffers (512 entrées + 4k).! - Prédiction incorrecte : bulle de 13 cycles (pipeline entier)! # 23 C. Wolf averages 0.99 and 1.07, respectively (using the harmonic mean). Recall that anything above 1.0 for indicates that the feature reduces execution time by more than it increases average power. Two of marks experience little speedup and have significant negative energy efficiency because of this. in all cases. These data were collected and analyzed by Esmaeilzadeh et al. [2011] using the Oracle ild 16.3-b01 Java 1.6.0 Virtual Machine and the gcc v4.4.1 native compiler. ARM-A8 : pipeline! F0 F1 F2 D0 D1 D2 D3 Branch mispredict penalty =13 cycles AGU RAM + TLB BTB GHB RS 12-entry fetch queue Instruction decode E0 E1 E2 E3 E4 E5 Instruction execute and load/store Architectural register file Instruction fetch D4 BP ALU/MUL pipe 0 update ALU pipe 1 BP update LS pipe 0 or 1 BP update Figure 3.36 The basic structure of the A8 pipeline is 13 stages. Three cycles are used for instruction fetch and four for instruction decode, in addition to a five-cycle integer pipeline. This yields a 13-cycle branch misprediction penalty. The instruction fetch unit tries to keep the 12-entry instruction queue filled. # 24 C. Wolf ARM-A8 : instruction decode! Chapter Three Instruction-Level Parallelism and Its Exploitation D0 D1 D2 D3 D4 Score board + issue logic RegFile ID remap Instruction decode Early Dec Dec/seq Dec queue read/write Early Dec Dec Figure 3.37 The five-stage instruction decode of the A8. In the first stage, a PC produced by the fetch unit (either from the branch target buffer or the PC incrementer) is used to retrieve an 8-byte block from the cache. Up to two instructions are decoded and placed into the decode queue; if neither instruction is a branch, the PC is incremented for the next fetch. Once in the decode queue, the scoreboard logic decides when the instructions can issue. In the issue, the register operands are read; recall that in a simple scoreboard, the operands always come from the registers. The register operands and opcode are sent to the instruction execution portion of the pipeline. E0 E1 E2 E3 E4 Instruction execute Integer register write back E5 # 25 C. Wolf line delays rather than memory stalls are the major contributor to the CPI. This result is partially due to the effect that Minnespec has a smaller cache footprint than full SPEC or other large programs. ARM-A8 : performance! 6 L2 stalls/instruction L1 stalls/instruction Pipeline stalls/instruction 5 Ideal CPI Cycles per instruction 4 3 2 1 0 gzip vpr gcc mcf crafty parser eon perlbmk gap vortex bzip2 # 26 C. Wolf Sommaire de la séance! Simultaneous Multithreading Time Processeurs multi-scalaires, multithreads! ! Maximum utilization of function units by independent operations ! ARM : architecture! ! ! ! X86 : ISA + architecture! ! # 27 C. Wolf L’Architecture x86! La complexité du x86 n’est pas un obstacle infranchissable … La plus grande faiblesse du jeu d’instructions x86 est le manque de registres combiné avec un dispositif d’adressage extrêmement pénible.! ! (Mike Johnson, responsable de la conception du 80x86 chez AMD,! Microprocessor report (1994)! # 28 C. Wolf x86 : registres 8 bit, 16 bit, 32 bit ! 8 bit et 16 bit (1979) 32 bit (1986)! Intel 80386 # 29 C. Wolf X86-64 : registres 64 bit! 64 bit (2003)! AMD Opteron # 30 C. Wolf X86-64 : tous les registres …! # 31 C. Wolf X86 : mémoire! Chaque adresse linéaire est spécifiée par une paire d’adresses : (segment + déplacement)! Déplacement! Segment! 16 16 Déplacement! Segment! 16 16 + 20 24 + 24 Au début, 8086! A partir du 80286 (en 1982)! # 32 C. Wolf x86 : encodage ! Imaginez votre pire cauchemar, et c’est la version 32 bit que vous admirez ici …! # 33 C. Wolf Intel i7! - - - - Processeur super-scalaire ! Exécution dans le désordre! Pipeline de 14 cycles! Prédiction dynamique de branchements par plusieurs méthodes en parallèle! - Décodage difficile : instructions longues, plusieurs octets doivent être lus avant de connaître la longueur.! # 34 C. Wolf Instructions vs. mu-Ops! - Depuis le pentium Pro (1997) :! – Cœur « RISC » ! – Jeu d’instruction « CISC » compatible avec les prédécesseurs ! Mémoire & Caches! Décodeur! d’instructions ! complexes! Décodeur! d’instructions ! simples! Décodeur! d’instructions ! simples! Générateur de séquences μ-op! File de μ-op ! Out-of-order! Fusion! Optimisation Unité d’exécution RISC! # 35 C. Wolf i7 : CISC / RISC! - Les opérations complexes (CISC!) x86 peuvent contenir des boucles! - Le Générateurs de μ-op peut générer 4 μ-op par clock, jusqu’à ce que l’instruction CISC est terminé.! - Le cœur RISC est super-scalaire : 6 μ-op peuvent être dispatchées par clock ! ! # 36 C. Wolf i7 : boucles! - Les boucles sont détectées par une logique dédiée! - Objectif : ne pas décoder les mêmes instructions. Les μop sont directement récupérées d’un cache dédié.! - Fonctionne si ! – < 28 instructions! – < 256 octets! # 37 C. Wolf i7 : Mémoire! - Cout des cache-miss :! – L1 : 10 cycles! – L2 : ~30 cycles! – L3 : 130-135 cycles! - Rappel : jusqu’à un certain point, les latences sont « masquées » par :! – L’exécution en désordre (single-thread)! – La nature super-scalaire (single-thread)! – Le SMT (multi-thread)! # 38 C. Wolf dard deviation). MCF and OMNETPP are the major outliers, both having a CPI over 2.0 while most other benchmarks are close to, or less than, 1.0 (gcc, the next highest, is 1.23). This variance derives from differences in the accuracy of branch i7 : (CPI moyenne)! 3 2.5 CPI 2 1.5 1 0.5 il N c am d D ea So lii pl Po ex vr ay Lb Sp m hi nx 3 M Bz ip 2 G cc M G cf ob m H k m m e Li S r bq je ua ng nt H um 26 4r O m ef ne tp p Xa A la sta nc r bm k Pe r lb en ch 0 gure 3.43 The CPI for the 19 SPECCPU2006 benchmarks shows an average CPI for 0.83 for both the FP and 39 C. Wolf0.44 eger benchmarks, although the behavior is quite different. In the integer case, the CPI values #range from to x86 vs. ARM! Appears in the 19th IEEE International Symposium on High Performance Computer Architecture (HPCA 2013) 3 Table 1. Summary of RISC and CISC Trends. Operands Fixed length instructions Relatively simple encoding ARM: 4B, THUMB(2B, optional) Simple, single function operations Single cycle Operands: registers, immediates Few addressing modes ARM: 16 general purpose registers Variable length instructions Common insts shorter/simpler Special insts longer/complex x86: from 1B to 16B long Complex, multi-cycle instructions Transcendentals Encryption String manipulation Operands: memory, registers, immediates Many addressing modes x86: 8 32b & 6 16b registers CISC decode latency prevents pipelining CISC decoders slower/more area Code density: RISC < CISC Even w/ µcode, pipelining hard CISC latency may be longer than compiler’s RISC equivalent CISC decoder complexity higher CISC has more per inst work, longer cycles Static code size: RISC > CISC µ-op cache minimizes decoding overheads x86 decode optimized for common insts I-cache minimizes code density impact CISC insts split into RISC-like micro-ops; optimizations eliminated inefficiencies Modern compilers pick mostly RISC insts; µ-op counts similar for ARM and x86 x86 decode optimized for common insts CISC insts split into RISC-like micro-ops; x86 and ARM µ-op latencies similar Number of data cache accesses similar How much variance in x86 inst length? Low variance ) common insts optimized Are ARM and x86 code densities similar? Similar density ) No ISA effect What are instruction cache miss rates? Low ) caches hide low code densities Are macro-op counts similar? Similar ) RISC-like on both Are complex instructions used by x86 ISA? Few complex ) Compiler picks RISC-like Are µ-op counts similar? Similar ) CISC split into RISC-like µ-ops Number of data accesses similar? Similar ) no data access inefficiencies Empirical Questions Convergence Historical Trends Contrasts RISC / ARM Operations CISC / x86 Format all performance and power differences by using measured metrics to quantify the root cause of differences and whether or not ISA differences contribute. The remainder of this paper is centered around these empirical questions framed by the intuition Reproduit de : Blem et al., 2013 presented as the convergence trends. Although whether an ISA is RISC or CISC seems irrelevant, did not find implementations that met all of our criteria: same technology node across the different ISAs, identical or similar microarchitecture, development board that supported necessary measurements, a well-supported operating system, and similar I/O and memory subsystems. We ultimately picked the Beagleboard (Cortex-A8), Pandaboard (Cortex-A9),# and board, 40 Atom C. Wolf x86 vs. ARM : tailles! - x86 cible la performance, et aussi la performance. ! - ARM cible (historiquement) le rapport entre performance et consommation! - Les stratégies sont en évolution ….! # 41 C. Wolf Interruptions! - Réactions sur des évènements ! – internes (exceptions mathématiques, accès mémoire interdite) ! – externes (matériel, changement de tâche etc.)! - Le programme actuel est interrompu, suivi par l’appel d’une sous-routine! - Problème d’atomicité des opérations call, push, pop etc.! - ARM : solution différente ! – Instruction bl (branch and link) sauvegarde le PC dans R14, suivi par le saut! – Les routines d’intérruptions dispose d’une autre version du R14 (comme le SP/R13)! # 42 C. Wolf A.8 Crosscutting Issues: The Role of Compilers Le rôle du compilateur! Dependencies Language dependent; machine independent Front end per language ■ A-25 Function Transform language to common intermediate form Intermediate representation Somewhat language dependent; largely machine independent Small language dependencies; machine dependencies slight (e.g., register counts/types) Highly machine dependent; language independent High-level optimizations Global optimizer Code generator For example, loop transformations and procedure inlining (also called procedure integration) Including global and local optimizations + register allocation Detailed instruction selection and machine-dependent optimizations; may include or be followed by assembler Reproduit : Hennessy et Patterson Figurede A.19 Compilers typically consist of two to four passes, with more# highly opti43 C. Wolf