Úvod do architektur procesorů Přednáška pro AČS Ing. Jakub Št astný, Ph.D. 1 1 FPGA Laboratoř/Laboratoř zpracování biologických signálů Katedra teorie obvodů, FEL ČVUT Technická 2, Praha 6, 166 27 23. února 2015
Osnova přednášky 1 Úvod 2 Programovatelné procesory 3 Architektura CPU Pamět ová architektura Šířka datového slova Architektura instrukční sady Proudové zpracování Paralelizace 4 Standardní funkční bloky 5 Návrh řadiče
A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away. [Antoine de Saint-Exupery]
Úvod, základní pojmy
neprogramovatelný systém stavový automat implementace zákaznické logiky Jak realizovat algoritmus systém programovatelný na úrovni hardware I/O buňky, piny - okruh kolem FPGA PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB PB Programovatelný blok Programovatelný blok Programovatelný blok Programovatelný blok
Úrovně programovatelnosti systém programovatelný na úrovni mikrokódu realizace automatu kombinační logikou vstupní signály stavový registr aktuální stav kombinační logika výstupní signály vstupní signály stavový registr aktuální stav adresa ROM nebo RAM data výstupní signály implementované tabulky přechodů a výstupů paměť mikroprogramu budoucí stav budoucí stav realizace automatu pamětí s mikroprogramem systém programovatelný na úrovni strojového kódu
Programovatelné procesory
Zjednodušené schéma mikropočítačového systému Oč se budeme zajímat pamět ová architektura šířka datového slova typ instrukční sady paralelizace Hodnocení výkonu procesoru typ instrukční sady typ hierarchie pamětí, pamět ová architektura propustnost IO zařízení
Hodnocení výkonu procesoru doba provádění programu T c = T N CPI (1) T perioda hodin = 1 f clk N počet instrukcí v programu CPI průměrný počet hodinových cyklů na instrukci subskalární procesor CPI > 1 (př. 4 a více Z0) skalární procesor CPI = 1 superskalární procesor CPI < 1 doba provádění programu dnes často už nehovoříme o f clk, není podstatné zrychlení musíme zmenšit jeden z faktorů bez zvětšení ostatních
Co tím rozumíme? Pamět ová architektura
Pamět ová architektura:von Neumann historicky starší jedna společná pamět pro data a instrukce jedna sada sběrnic k paměti bud čteme D, nebo I program může modifikovat sám sebe buffer overflow attack (změna návratové adresy+instrukce v prostoru zásobníku, jump esp"). výhoda levné, snáze se programuje nevýhoda snížený výkon sdílením paměti (tzv. von Neumannův bottleneck) dnešní architektura procesorů osobních počítačů je z hlediska programátora von Neumannova T c = T N CPI
Pamět ová architektura:harvard fyzicky oddělená pamět pro data a instrukce dvě sady sběrnic k paměti lze číst současně D a I program nemůže modifikovat sám sebe, nelze číst pamět programu výhody vyšší výkon fyzicky oddělené paměti mohou mít odlišné parametry (př. PIC24F 24b instrukční, 16b datová pamět ) nevýhody dražší, protože potřebujeme dvě sady sběrnic problém s inicializací konstant v paměti programu v této "extrémistické" podobě se příliš nepoužívá T c = T N CPI
Pamět ová architektura:další úzké hrdlo! modifikovaná harvardská architektura harvardská architektura možnost číst programovou pamět jako data řeší problém inicializace datové paměti mnoho mikrokontrolérů, DSP procesory hybridní architektura moderních procesorů z hlediska programátora von Neumannova fyzicky sdílená pamět na program a data z hlediska procesoru harvardská, dvě cache výkon
Šířka datového slova
Šířka datového slova 1 co tím rozumíme? 2 co je lepší rychlejší a kdy? 3 jaké parametry procesoru ovlivní šířka datového slova? v rovnici T c = T N CPI a jaké fyzické parametry logického obvodu a jaké fyzické parametry nás vlastně zajímají?
Šířka datového slova mýty a realita o šířce slova jen částečně určuje výpočetní výkon specifické aplikace je třeba najít rovnováhu mezi rychlostí výpočtu a přesností vliv na počet bitů instrukce vliv na velikost logiky vliv na rychlost logických obvodů vliv na spotřebu energie systémem přenos apl. mezi systémy s různě širokým slovem noční můra 4b jednoduché mikrokontroléry, 16b embedded systémy, chytré senzory, nízká komplexita aplikací 24b často DSP procesory, vhodný kompromis šum/cena 32b, 64b embedded systémy, osobní počítače, high end další šířky podle potřeby aplikace vyplave zase u aritmetiky
Šířka datového slova příklad př. EM650 http://www.emmicroelectronic.com/products.asp?idproduct=215 0.4 MIPS, flash memory 4096x16 bits, RAM 0x4 bity 4bit ADC, 5 výstupů/2 výkonové výstupy (do 10 ma) SO-/14 pouzdro, UID v čipu Sleep Counter Reset (automatic wake-up from sleep mode) RC oscillátor 32kHz 00kHz watchdog timer (2 sec), Power-On-Reset with Power-Check on start-up 3 wire serial port, 10-bit čítač, PWM, event counter pro domácí přístroje, automobilový průmysl, rozhraní k senzorům, hodinky, atd.
Co tím rozumíme? Architektura instrukční sady
Architektura instrukční sady a mikroarchitektura Instruction Set Architecture (ISA) definuje které operace jsou procesorem podporovány jak jsou kódovány instrukce formát instrukce, operačního znaku, reprezentace operandů, adresní módy, ukládání výsledků, etc. je rozhraním mezi programátorem a procesorem Microarchitecture/mikroarchitektura definuje detaily HW implementace procesoru obecně detaily implementace SW HW CPU, MEM, IO,... ISA
CISC - Complex Instruction Set Architecture snaha o rozšíření instrukčního souboru, podpora pro vyšší programovací jazyky košatý instrukční soubor, mikroprogramovaný řadič historicky 60./70. léta často se programovalo ve strojáku" sémantická mezera snaha přiblížit asembler vyšším jazykům načítání instrukce z paměti bylo pomalé redukce množství instrukcí a možnost kódování s vyšší hustotou složitá operace snižuje dobu vykonávání programu, protože snižuje množství čtení z paměti místo více jednoduchých instrukcí jedna komplikovaná operace akceptovatelné delší dekódování instrukce malé paměti
CISC - Complex Instruction Set Architecture Příklad CISC instrukce: REPE CMPSB Compare bytes: ES:[DI] from DS:[SI]. Algorithm: 1 DS:[SI] - ES:[DI] 2 set flags according to result: OF, SF, ZF, AF, PF, CF 3 if DF = 0 then SI = SI + 1, DI = DI + 1 else SI = SI - 1, DI = DI - 1 další příklady: http://wikiti.brandonw.net/index.php?title=z0_instruction_set Jak ovlivní CISC architektura členy známé rovnice? T c = T N CPI
CISC - Complex Instruction Set Architecture nejznámější příklady Z0, řada 0x6 70. léta první VLSI čipy,jednoduché procesory s pipeline se už vešly do jednoho čipu, zrychlení pamětí pozorování: cca 0% času CISC procesor vykonává 20% typů instrukcí nejčastěji jednoduché operace typu load, store, add,... negativa: komplexní a pomalý řadič řadič zabírá velkou plochu čipu řadič je velký stavový automat mnoho spojů a špatná routovatelnost/utilizace časově náročná verifikace systému vývoj: zjednodušení instrukční sady na naprosté minimum
RISC - Reduced Instruction Set Architecture ISA: pevná délka instrukce, jednotné kódování malý počet jednoduchých instrukcí zadrátovaný řadič" v průměru CPI<1.5, ideálně 1 velký počet registrů dostupných programátorovi (32-192) operace s daty jen nad registry load/store architektura, omezené množství adresních módů často nezbytná podpora kompilátoru, různá omezení příklad: http://en.wikipedia.org/wiki/mips_instruction_set A dopad na známou rovnici? T c = T N CPI
RISC vs. CISC dnes rozdíly mezi CISC a RISC se v podstatě setřely moderní CISC procesory adoptovaly RISCové vlastnosti (jednoduché instrukce v jednom cyklu) moderní kompilátory dokáží využít i komplexní instrukce RISC - success story: ARM (embedded), MIPS (PlayStations etc), Atmel AVR.
Co si pod tím představíte? Proudové zpracování
Proudové zpracování: koncepce komb. logika t r t l komb. logika komb. logika t r t l /2 t r t l /2 t r pomalá komb. cesta více menších c. vložením registrů rozdělení do fází/stages, mezivýsledky registrovány po fázi jak nám to pomůže?
Proudové zpracování: koncepce komb. logika t r t l komb. logika komb. logika t r t l /2 t r t l /2 t r vzroste latence je možné začít výpočet nové úlohy ještě než skončí stará co to bude stát?
Proudové zpracování: koncepce komb. logika t r t l komb. logika komb. logika t r t l /2 t r t l /2 t r na FPGA téměř zdarma, protože se jedná o architekturu bohatou na registry. kombinační zpoždění se sice N zmenší ALE zpoždění registrů vložených do obvodu původní návrh: t clkmin = t r + t l + t s proudové zpracování: t clkmin = t r + t l /2 + t s možnost automatické aplikace obecná metodika
Proudové zpracování v CPU pipeline jak zrychlit výpočet: replikací jednotek paralelizací zřetězením jednotek snižujeme CPI, T, T c = T N CPI podmínky pro zřetězení: nepřetržitý přísun dat operaci nutno rozdělit na sekvenci stejně časově náročných kroků realizovaných jednotlivými stupni řetězu trvání jednotlivých kroků by mělo být zhruba stejné urychlení běhu aplikace bez pipeline: perioda hodin a CPI určuje výkon, doba běhu programu je prostý součet dob běhu jednotlivých instrukcí s pipeline: latence, hodinová frekvence a iniciační interval pipeline určuje výkon
Proudové zpracování nejjednodušší dvě fáze, Fetch, Execute nízká využitost IF fáze (33% v příkladu), řešení více fází příklad 06, asynchronní pipeline, fetch když je "volno" 6B FIFO MEM BIU write read EXU full empty IF EX EX EX Intel 06 CPU IF EX EX EX IF EX EX EX
Proudové zpracování Typická pipeline v RISC procesoru: IF instruction fetch, načtení instr. z paměti z adresy v program counteru, ten je automaticky inkrementován ID instruction decode, dekódování instrukce, přenos operandů z registrového pole do ALU EX instruction execution, vykonání ME memory access WB writeback, zpětný zápis výsledků z ALU do reg. pole příklad: http://en.wikipedia.org/wiki/mips_instruction_set IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB
Proudové zpracování konflikty při zpracování instrukcí datové read after write (RAW), write after read (WAR), write after write (WAW), ADD r1,r2,r2 SUB r5,r1,r4 IF ID EX WB IF ID r1 = r2+r2?? EX WB r5 = r1 r4 řídící nevíme, zda se podmíněný skok vykoná, nebo ne. Jaká se má načíst instrukce po instrukci skoku? strukturní závislosti blok v procesorovém systému je současně vyžadován dvěma instrukcemi v různých fázích zpracování (např. pamět současně pro fetch a pro čtení operandů instrukce) řešíme staticky kompilátorem dynamicky za běhu, procesorem, v hardware (pipeline stall, predikce skoků)
Proudové zpracování CedarMill (Celeron D, Pentium 4), 65 nm, 31 stages Core (Core 2, Xeon), 65 nm, 14 stages SandyBridge (Core I7), 32 nm, 14 19 stages, 2011 Haswell, 22 nm, 14 19 stages, 2013 Prescott: 31 stages vs. 20 pro Northwood, larger cache (dvojnasobek L1 i L2), 5.7% performance improvement over Northwood only, 103 W vs. 2 W, 125M vs. 55M tranzistoru
Co tím rozumíme? Paralelizace
Paralelizace téměř všechny algoritmy dovolují využít jistého paralelizmu dosažení vyšší rychlosti výpočtu s rostoucí rychlostí CPU nelineárně roste cena místo jedné jednotky s hodinami na 1 GHz lze teoreticky lze použít 4 250MHz jednotky (a s klesající frekvencí lze snížit napájecí napětí kombinace 4 procesorů může mít menší spotřebu) použití specifických procesorů koprocesorů optimalizovaných na konkrétní úlohy
Paralelizace granularita na úrovni procesů na úrovni vláken na úrovni instrukcí na úrovni mikroinstrukcí na úrovni hradel Amdahlův zákon Speedup = 1 r s+ rp n Příklad: lze paralelizovat bez omezení počtu procesorů 75% výpočtu r s = 0.25, r p = 0.75, Speedup max,n = 4
Paralelizace: Flynnova taxonomie
Nejjednodušší paralelizace nejjednodušší spolupráce DMA a procesoru, double buffering
Multithreading mezera ve výkonu pamětí a CPU CPU čeká na pamět, když (př 50 instrukcí/pipeline stall) instrukce načítá data, která nejsou v cache došlo ke špatné predikci podmíněného skoku... během čekání lze pokračovat v jiné úloze, která pamět nepotřebuje 1 1
Multithreading nutná podpora pro rychlé přepnutí úloh, sdílená pamět více čítačů programu, registrových sad v procesoru příklad: MIPS MT, 14% overhead podpory pro MT, o 60% větší výkon CPU 2 2 Demistyfing multithreading and multi-core, Kevin D. Kissell, EE Times
Multiprocessing víceprocesorový systém rovnocenné procesory vs. koprocesor oddělené úlohy, sdílení paměti je nutno implementovat velká granularita symetrický a asymetrický multiprocessing
von Neumann s bottleneck další akcelerace výpočtu limit datové propustnosti rozhraní k paměti tzv. "von Neumann s bottleneck" nelze přidávat další a další výpočetní jednotky a zvyšovat množství paralelně prováděných operací nebudeme stačit dodávat dostatečně rychle data pro výpočet z paměti Dalši urychlení umožňují až specializované výpočetní architektury.
Standardní funkční bloky
Schéma jednoduchého procesoru řadič čítač instrukcí adresová sběrnice paměť instrukční registr datová sběrnice dekodér instrukcí datová cesta řadič ALU registrové pole
Standardní funkční bloky paměť datová cesta registrové pole Řadič řídí ostatní jednotky podle dekódované instrukce řadič adresová sběrnice čítač instrukcí datová sběrnice instrukční registr dekodér instrukcí řadič ALU "zadrátovaný" řadič FSM RISC mikroprogramovaný řadič "CPU v CPU" CISC procesory př. Intel Pentia aktualizace mikrokódu možná př. microcode update Linux
Standardní funkční bloky paměť datová cesta registrové pole ALU Arithmetic-Logic Unit v každém CPU adresová sběrnice datová sběrnice ALU elementární aritm. a log. operace +,-,*,and,not,or,xor,posuvy čítač instrukcí instrukční registr dekodér instrukcí řadič operandy akumulátorová architektura vs. GPR řadič příznaky Cy,S,Z
Standardní funkční bloky paměť datová cesta registrové pole registrové pole nejrychleji dostupná pamět tzv. architekturní registry adresová sběrnice datová sběrnice ALU obecné vs. specializované registry jeden vs. více adresních registrů čítač instrukcí instrukční registr dekodér instrukcí řadič řadič hodně registrů urychlí práci s lokálními proměnnými (RISC architektury)
Standardní funkční bloky adresová sběrnice paměť datová sběrnice datová cesta registrové pole ALU adresní jednotka adresovací režimy: přímý operand, registrový operand, přímá adresa, nepřímá adresa, index, báze, autoinkrementace stránkování vs. lineární adresní režim čítač instrukcí instrukční registr dekodér instrukcí řadič bloková adresace (ofset,limit) DSP, cyklická autoinkrementace řadič reverzní adresace DSP (FFT)
Standardní funkční bloky MMU Memory Management Unit správa paměti segmentace, stránkování virtuální pamět přístupová práva k paměti FPU Floating-Point Unit elementární aritm. operace (+-*/) někdy složitější,sin,cos softwarová emulace
Návrh mikrořadiče
Návrh řadiče adc_start <= 1 get_result <= 0 chceme: velmi jednoduchý programovatelný řadič pro realizaci stavových automatů potřebné operace? adc_start <= 0 get_result <= 0 adc_ready = 0 adc_start <= 0 get_result <= 1 +
Požadavky na řadič 1 pamět mikroprogramu na 256 instrukcí, bit PC, pokud PC = 255 PC = 0, poč. stav je PC = 0 2 7 vst. podmínkových signálů kt. lze ovlivňovat provádění instrukci (podmíněné instrukce, predikáty), signály jsou asynchronní vůči hodinám 3 4 výstupní bit brány ovládané mikroinstrukcí WRITE. Brána je registrovaná, reset registr nastaví do 0x00 4 mikroinstrukce JUMP umožňuje nahrát obsah PC a provést skok 5 uvolnění asynchronního resetu je už externě synchronizované do lokální hodinové domény
Interface řadiče clk res cond_1 cond_2 cond_3 cond_4 cond_5 cond_6 cond_7 PicoCTRL port_0 port_1 port_2 port_3
Příklad mikroprogramu clk res cond_1 cond_2 cond_3 cond_4 cond_5 cond_6 cond_7 PicoCTRL port_0 port_1 port_2 port_3 adc_start <= 1 get_result <= 0 adc_start <= 0 get_result <= 0 port0.0 = adc_start, port0.1 = get_result, cond_1 = adc_ready WRITE 0x01 TO port_0 WRITE 0x00 TO port_0 WAIT: IF cond_1 = 0 THEN JUMP TO WAIT WRITE 0x02 TO port_0 adc_ready = 0 adc_start <= 0 get_result <= 1 +
Formát mikroinstrukce 15 14 13 12 11 10 9 7 6 5 4 3 2 1 0 CV Podmínka OpCode Parametry instrukce OpCode operační kód instrukce, 01 WRITE, 00 JUMP Parametry WRITE AADDDDDDDD Adresa reg., bit Data Parametry JUMP 00JJJJJJJJ bit cílová adresa pro skok Podmínka index podmínkového vstupu, podmínky 1 7 čteny ze vstupů cond_1 cond_7, podmínka 0 je trvale v log. 0 CV logická hodnota kt. musí podmínkový signál mít, aby se instrukce provedla
Přeložený mikroprogram 00:0000 0100 0000 0001 IF cond_0 = 0 THEN WRITE 0x01 TO port_0 01:0000 0100 0000 0000 IF cond_0 = 0 THEN WRITE 0x00 TO port_0 WAIT: 02:0001 0000 0000 0010 IF cond_1 = 0 THEN JUMP TO WAIT 03:0000 0100 0000 0010 IF cond_0 = 0 THEN WRITE 0x02 TO port_0
Pamět mikroprogramu a čítač instrukcí PC 1 15 14 13 12 11 10 ROM 5 4 3 2 9 7 6 1 0 0 0x01 Odkud se nahrává PC?
Nepodmíněná instrukce JUMP 15 14 13 12 11 10 9 7 6 5 4 3 2 1 0 CV Podmínka 00 00JJJJJJJJ PC 1 15 14 13 12 11 10 ROM 5 4 3 2 9 7 6 1 0 0x01 0 JUMP Jak přidáme podmínky?
Podmínky a podmíněný JUMP 15 14 13 12 11 10 9 7 6 5 4 3 2 1 0 CV Podmínka 00 00JJJJJJJJ PC 1 15 14 13 12 11 10 ROM 5 4 3 2 9 7 6 1 0 0x01 0 cond_1 0 JUMP cond_2 cond_3 cond_4 cond_5 = cond_6 cond_7 Jak rozpoznáme instrukci WRITE?
Detekce instrukce WRITE 15 14 13 12 11 10 9 7 6 5 4 3 2 1 0 CV Podmínka 01 AADDDDDDDD PC 1 15 14 13 12 11 10 ROM 5 4 3 2 9 7 6 1 0 0x01 0 cond_1 cond_2 0 WRITE JUMP cond_3 cond_4 cond_5 = cond_6 cond_7 Jak bude vypada logika pro výstupní brány?
Implementace výstupních bran 15 14 13 12 11 10 9 7 6 5 4 3 2 1 0 CV Podmínka 01 AADDDDDDDD PC 1 15 14 13 12 11 10 ROM 5 4 3 2 9 7 6 1 0 0x01 0 cond_1 cond_2 cond_3 cond_4 cond_5 cond_6 cond_7 0 = WRITE JUMP 0 1 0 1 0 1 0 1 port_0 port_1 port_2 port_3 Odkud bereme data pro zápis do výstupních bran?
Datová cesta data pro brány 15 14 13 12 11 10 9 7 6 5 4 3 2 1 0 CV Podmínka 01 AADDDDDDDD PC 1 15 14 13 12 11 10 ROM 5 4 3 2 9 7 6 1 0 0x01 0 cond_1 cond_2 cond_3 cond_4 cond_5 cond_6 cond_7 0 = WRITE JUMP 0 1 0 1 0 1 0 1 port_0 port_1 port_2 port_3 Odkud bereme informaci do které brány zapsat?
PicoCTRL kompletní schéma PC 1 15 14 13 12 11 10 ROM 5 4 3 2 9 7 6 1 0 0x01 0 cond_1 cond_2 cond_3 cond_4 cond_5 cond_6 cond_7 0 = JUMP WRITE 0 1 0 1 0 1 0 1 port_0 port_1 port_2 port_3