TSEA28 Datorteknik Y (och U) Föreläsning 8 Kent Palmkvist, ISY TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 2 Dagens föreläsning Ett större exempel av signalbehandlande system Ge fler exempel på assemblerkodning Optimering av kod Nya instruktioner Hur man jämför datorer SPEC Andra mätmetoder
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 3 Praktiska kommentarer Extratillfällen Lab2 (för dom som gjort hemuppgift 2 i tid) Inkluderar hjälp (på samma sätt som tidigare labbar) Lab2: Torsdag 2/3 kl 17-19 Lab3: Fredag 10/3 kl 10-12 Extra redovisningstillfälle Lab 1-3, Fredag 10/3 kl 13-15 Enbart redovisning (ingen hjälp) TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 4 Praktiska kommentarer Ordning i labbet Allra flesta sköter det bra Kopplar ned allt utom tutorkortet (med strömmen avstängd) Loggar ur (ni ska inte stänga av datorn) Inga gamla kaffekoppar eller liknande kvar i labbet Labbet kommer användas för annan undervisning i vt2 Tutor-systemet plockas ut från labbet inför vt2 Tutor-server finns fortfarande ssh tutor
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 5 Ett större exempel Signalbehandlingsexempel Filtrering av en signal Se länk från föreläsningstabellen för mer information Generell struktur TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 6 Ett större exempel, forts. Antag vi vill bygga ett filter som implementerar y[n]= i=0 Antag b = [-0.0448 0.1659 0.8105 0.1659-0.0448} Lagra koefficienterna i b i en minnesarea coefficients (multiplicerade med 2^15 för att få heltal) Data är 16-bitars värden (2 byte var) Antag 100 sampel som ska filtreras per gång är lagrade i en minnesarea $2000 - $23EC 4 extra insampel för att skapa 100 utsampel Antag resultatet ska lagras i minnesarea $3000 - $33E8 Totalt 3000 block ska filtreras N x[n i]b i
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 7 Ett större exempel, kodstruktur Initiera addresspekare (A0, A1), sampelräknare (D0) samt blockräknare (D7) Loop över alla sampel Sätt koefficientpekare A2 till start av koefficienter Nollställ mellanresultat (D2) Loop över alla koefficienter Multiplicera sampel med koefficient => D1 Addera till mellanresultat (D2) Hoppa ur loop om adresspekare = coefficient_end Dividera med 2^15 (för att få multiplikation med 0.0448 etc), spara resultat i ut Räkna ned sampelräknare (D0), ta nästa sampel om inte slut Räkna ned block (D7), om alla block klara hoppa till Tutors prompt, annars ta nästa block TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 8 Ett större exempel, kodstruktur Initiera addresspekare (A0, A1) och sampelräknare (D0) move.l #3000,d7 ; Antal block som ska filtreras start: move.l #$2000,a0 ; Indata move.l #$3000,a1 ; Outdata move.l #100,d0 ; Antal sampels
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 9 Filter v1 Följer efter initiering inner_loop: move.l #coefficients,a2 ; Koefficienter för filtret finns här clr.l d2 ; Nollställ ackumulator sample_loop: ; Läs sampel, multiplicera med koefficient, ; samt addera till ackumulator cmp.l #coefficients_end,a2 ; Färdiga med detta värde? beq sample_ready bra sample_loop asr.l #8,d2 ; Dividera med 2^15 asr.l #7,d2 move.w d2,(a1)+ ; Spara resultat i utbuffert add.l #-8,a0 ; Justera a0 så den pekar på nästa sampel med indata add.l #-1,d0 ; Räkna ner loopräknaren bne inner_loop add.l #-1,d7 ; nästa block att räkna på bne start move.b #255,d7 ; hoppa tillbaks till Tutor prompt trap #14 coefficients: dc.w -1448,5437,26559,5437,-1448 coefficients_end: TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 10 Olika instruktioner tar olika lång tid Klockfrekvens Dubbel klockfrekvens betyder inte dubbel prestanda Vanligt mått: IPC (Instruction Per Clockcycle) Antal minnesläsningar/skrivningar Kan 32 bitar läsas på en gång? Hur snabbt är minnet? Hur lång är instruktionen Villkorliga hopp kan ta olika lång tid beroende på om villkoret är sant eller falskt
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 11 Prestanda filter version 1 Exekveringstid ca 39 sekunder på Tutor Inte optimerat, kan göras bättre Vad tar onödig tid (instruktioner i loop är dyrast) Vanligaste hoppet tas inte (jämför, hoppa inte, hoppa) cmp.l #coefficients_end,a2 beq sample_ready bra sample_loop cmp.l #coefficients_end,a2 bne sample_loop Läser konstanter i instruktionen, snabbare jämföra med register (färre ord i instruktionen att läsa) cmp.l #coefficients_end,a2 ; 2 ords instruktion cmp.l a4,a2 ; 1 ords instruktion ; måste dock sätta a4 innan loop startasf TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 12 Filter version 2 Vanligaste hoppet är det första som testas Vanliga konstanter läggs i register A3 och A4 innan loop startar Programmet aningen större (2 byte längre) 1 instruktion borttagen (bra inner_loop) 2 instruktioner tillagda (move.l #coefficients...) 2 instruktioner förenklade (move.l a3,a2, cmp.l a4,a2) Exekveringstid Ca 32 sekunder (-18%) move.l #3000,d7 start: move.l #$2000,a0 move.l #$3000,a1 move.l #100,d0 move.l #coefficients,a3 move.l #coefficients_end,a4 inner_loop: move.l a3,a2 clr.l d2 sample_loop: cmp.l a4,a2 bne sample_loop asr.l #8,d2 asr.l #7,d2 move.w d2,(a1)+ add.l #-8,a0 add.l #-1,d0 bne inner_loop add.l #-1,d7 bne start move.b #255,d7 trap #14 coefficients: dc.w -1448,5437,26559 dc.w 5437,-1448 coefficients_end:
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 13 Prestanda filter version 2 Titta på vanligaste operationerna add.l d1.d2 cmp.l a4.a2 bne sample_loop Vad tar onödig tid Test av slut på loop är onödig (20% av instruktionerna) Kopiera istället instruktionerna motsvarande antal Tekniken kallas Loop unrolling Enklast om fixt antal varv i loop move.l #3000,d7 start: move.l #$2000,a0 move.l #$3000,a1 move.l #100,d0 move.l #coefficients,a3 move.l #coefficients_end,a4 inner_loop: move.l a3,a2 clr.l d2 sample_loop: cmp.l a4,a2 bne sample_loop asr.l #8,d2 asr.l #7,d2 move.w d2,(a1)+ add.l #-8,a0 add.l #-1,d0 bne inner_loop add.l #-1,d7 bne start move.b #255,d7 trap #14 coefficients: dc.w -1448,5437,26559 dc.w 5437,-1448 coefficients_end: TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 14 Filter version 3 Programmet växer i storlek +10 byte Exekveringstid: 25 sekunder (-22%) move.l #3000,d7 start: move.l #$2000,a0 move.l #$3000,a1 move.l #100,d0 move.l #coefficients,a3 inner_loop: move.l a3,a2 sample_loop: move.w (a2)+,d2 muls.w (a0)+,d2 asr.l #8,d2 asr.l #7,d2 move.w d2,(a1)+ add.l #-8,a0 add.l #-1,d0 bne inner_loop add.l #-1,d7 bne start move.b #255,d7 trap #14 coefficients: dc.w -1448,5437,26559,5437,-1448 coefficients_end:
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 15 Prestanda filter version 3 Koefficienterna alltid samma Läs in dom i register innan loop Fungerar bäst för beräkningar med fixa värden och få konstanter 5 koefficienter men bara 3 olika värden move.l #3000,d7 start: move.l #$2000,a0 move.l #$3000,a1 move.l #100,d0 move.l #coefficients,a3 inner_loop: move.l a3,a2 sample_loop: move.w (a2)+,d2 muls.w (a0)+,d2 asr.l #8,d2 asr.l #7,d2 move.w d2,(a1)+ add.l #-8,a0 add.l #-1,d0 bne inner_loop add.l #-1,d7 bne start move.b #255,d7 trap #14 coefficients: dc.w -1448,5437,26559,5437,-1448 coefficients_end: TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 16 Filter version 4 Ta bort konstanttabellen Inre loop lika lång (samma antal instruktioner) Färre minnesläsningar ger snabbare program Fler instruktioner + 10 byte Exekveringstid 22 sekunder (-12%) move.l #3000,d7 start: move.l #$2000,a0 move.l #$3000,a1 move.l #100,d0 move.l #-1448,d3 move.l #5437,d4 move.l #26559,d5 inner_loop: sample_loop: move.w d3,d2 muls.w (a0)+,d2 move.w d4,d1 move.w d5,d1 move.w d4,d1 move.w d3,d1 asr.l #8,d2 asr.l #7,d2 move.w d2,(a1)+ add.l #-8,a0 add.l #-1,d0 bne inner_loop add.l #-1,d7 bne start move.b #255,d7 trap #14
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 17 Prestanda filter version 4 Allt svårare öka prestanda Det mesta av tiden spenderas på move, muls och add Några saker kan förbättreas En instruktion istället för 2 för skift Snabbare instruktion för subtraktion Små konstanter kan ingå i instruktionsordet Ger färre minnesläsningar move.l #3000,d7 start: move.l #$2000,a0 move.l #$3000,a1 move.l #100,d0 move.l #-1448,d3 move.l #5437,d4 move.l #26559,d5 inner_loop: sample_loop: move.w d3,d2 muls.w (a0)+,d2 move.w d4,d1 move.w d5,d1 move.w d4,d1 move.w d3,d1 asr.l #8,d2 asr.l #7,d2 move.w d2,(a1)+ add.l #-8,a0 add.l #-1,d0 bne inner_loop add.l #-1,d7 bne start move.b #255,d7 trap #14 TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 18 Prestanda filter version 5 Ersätt skiftinstruktioner Skift med register tillåter fler stegs skiftning Ersätt subtraktion med lång konstant Kort konstant ger kortare instruktion 0680 FFFF add.l #-1,d0 FFFF 5380 subq.l #1,d0 Färre minnesläsningar Kortare program -12 byte Exekveringstid: 20 sekunder (-10%) move.l #3000,d7 start: move.l #$2000,a0 move.l #$3000,a1 move.l #100,d0 move.l #-1448,d3 move.l #5437,d4 move.l #26559,d5 move.l #15,d6 inner_loop: sample_loop: move.w d3,d2 muls.w (a0)+,d2 move.w d4,d1 move.w d5,d1 move.w d4,d1 move.w d3,d1 asr.l d6,d2 move.w d2,(a1)+ subq.l subq.l bne #8,a0 #1,d0 inner_loop subq.l #1,d7 bne start move.b #255,d7 trap #14
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 19 Andra alternativ Ytterligare förbättringar kan göras Kräver detaljerad kunskap om M68k och hur den utför instruktioner Måste veta hur lång tid varje instruktion tar Beror bl a på adresseringsmod Exempel på intressanta instruktioner för optimering (för den intresserade) DBcc (Test condition, decrement and branch) Loopräknare och villkor för avslut av loop RTR (Return and restore condition code) Återställ flaggor ifrån subrutiner (liknar RTE) TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 20 Andra alternativ, forts. Andra alternativ bygger på förändringar/byte av algoritmen För den intresserade: Googla på FFA (Fast Fir Algorithm) Kan vara intressant att använda t ex FFT (Fast Fourier Transform) Byta multiplikation mot flera additioner Exempel: b0=b4 => b0*x(n)+b4*x(n-4) = b0*(x(n)+x(n-4)) Ändra beräkningsordning för att undvika läsning av samma minnesvärde flera gånger Läs en gång till register och multiplicera sedan med alla olika koefficienter (resultat i olika register)
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 21 Slutsats om prestanda Går ofta att förbättra (till en viss gräns) I exemplet: 39 sekunder -> 20 sekunder Nästan en halvering! Prestandaökning inte gratis Ökad mängd kod 78 byte + tabell med 10 byte -> 88 byte Mindre flexibilitet Svårt öka antal koefficienter Fungerar kanske bara på en processormodell Svårare förstå kod TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 22 Slutsats om prestanda, forts. En del av förbättringarna är svåra att generera automatiskt vid kompilering av högnivåspråk Extrem prestanda kräver ibland assemblerprogrammering Kompilatorns kvalitet viktig Översätter högnivåspråk till assembler Som synes finns många val, kompilatorn måste vara bra på att hitta snabba lösningar
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 23 Slutsats om prestanda, forts. Nästa processorgeneration kan ha helt andra egenskaper Nya instruktioner som löser delproblem bättre Bredare/snabbare minnebuss Fler register T ex 68020 (efterföljare till 68000) 32 x 32 bit multiplikation (ger 64 bitars resultat) Snabbar instruktioner då den räknar med 32-bitars data internt (68000 använder 16 bitar internt). Fler adresseringsmoder 8x högre maximal effektförbrukning (2 Watt), 50% högre klockfrekvens (25 MHz) TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 24 Prestanda hos andra arkitekturer Hastighet att utföra instruktioner endast en av flera intressanta egenskaper Beror på tänkt tillämpning Kostnadsmått varierar Exekveringshastighet, programstorlek, stöd för datatyper och operationer Hastighetskrav för avbrott Hur snabbt svar? Extra register, automatiskt spara register etc. Hur vet processorn adress för avbrott? Flexibilitet vs hastighet
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 25 Alternativa instruktionsuppsättningar ARM (används i ARM Cortex-A, t ex Raspberry Pi) Möjliggör villkorlig exekvering av flytt, aritmetiska och subrutinhoppsoperationer CMP r0, #0 ; if (x <= 0) MOVLE r0, #0 ; x = 0; MOVGT r0, #1 ; else x = 1; Tillåter val om flaggor ska påverkas av en instruktion Varje instruktion är 32 bitar lång Väldigt få adresseringsmoder Cortex-A familjen kan tolka olika instruktionsuppsättningar ARM vs THUMB vs THUMB2 Olika längd på instruktioner beroende på instruktionsuppsättning TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 26 Alternativa instruktionsuppsättningar Intel x86 (gamla IBM PC) Instruktioner är 8 bitar eller längre Prefix för att utöka antal möjliga instruktioner (8 bit instruktioner) Zilog (Z80), satt i många av de första hemdatorerna Byggde på Intel 8080 (samma designers) 8-bitars processor, med register A-E, H, L, SP, PC Prefixbyte i instruktionen väljer ett alternativt register (IX eller IY) istället för HL i följande instruktion $09 ADD HL,BC $FD $09 ADD IY,BC
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 27 Prestandajämförelse Antal register, operationstyper, klockfrekvenser och ordbredder skiljer sig åt Varierar även inom samma familj av processorer Köparen av en dator är intresserad av prestanda (tid, effekt, kostnad) för att köra köparens applikationer Olika processorer är bra på olika saker (heltalsaritmetik, sekvensiell vs parallel exekvering etc.) Vill därför kunna jämföra prestanda för vissa typer av arbetsuppgifter TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 28 Prestandajämförelse, forts. Standardiserade test: SPEC Standard Performance Evaluation Corporation SPEC CPU2006 SPECint 2006: 12 olika program att mäta heltalsprestanda på SPECfp 2006: 19 olika program att mäta flyttalsprestanda på Definierade test ger samma effekt som för dieselbilars utsläppstester... Processorer blir optimerade för att ge bra testresultat Bra testresultat stämmer inte alltid med bra prestanda för önskad applikation. Vanligt med stor mängd verkliga testfall istället
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 29 Prestandajämförelse, forts. Alternativa jämförelser Generella, sammanfattande PC Mark, SISoftware Sandra Specifika, vanliga nyttoprogram Office Adobe Zip Specifika, beräkningsserver NAMD, Unixbench, sysbench Specifika, Gaming Battlefield, hitman, GTA etc. TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 30 Prestandajämförelse, forts. Att komma ihåg vid jämförelse av datorer Processorn är en del av ett större system Prestanda kan begränsas av många andra delar Hårddisk vs SSD Minne Kylning
TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2016-03-07 31 Nästa period (VT2) Dags att lära sig hur datorn är uppbyggd i detalj Introducera bussar, register, beräkningselement, klockcykler, styrsignaler etc. Se hur arkitektur bestämmer hastighet hos datorn Därefter se hur prestanda kan ökas mha diverse lösningar Förutse nästa instruktion Använda små snabba minnen Göra flera saker samtidigt TSEA28 Datorteknik Y (och U), föreläsning 8, Kent Palmkvist 2017-02-27 32 Nästa period (VT2), forts. Ingen mer 68000 assembler i nästa period Undantag: Tenta! Titta på gamla tentor för att se upplägg och tillgänglig information Se till att träna så ni kan skriva egna små program Träna att analysera given kod (jämför hemuppgift 2) Förväntar mig inte att ni kan alla instruktioner Ska kunna de instruktioner ni använde i labben Många specialinstruktioner är inte nödvändiga Ex: NBCD (negate decimal with extend), BCHG (Test a bit and change)
www.liu.se