To mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B Martin Zachariasen 10. september 2004 1 Introduktion Dette er den karaktergivende rapportopgave på kurset Maskinarkitektur 1B, efterår 2004. Opgaven skal løses i grupper på indtil 3 personer. Opgaven bliver stillet tirsdag d. 14. september 2004 kl. 13.00 og skal afleveres i 1.dels administrationen i 2 eksemplarer senest onsdag d. 20. oktober 2004 kl. 10.00. Alle programmer og testdata brugt i rapporten skal være tilgængelige i et katalog med navnet bruger/kark, hvor bruger er den 1. delskonto som er nævnt på forsiden. Der må ikke rettes i disse filer efter afleveringen. 2 Om opgaven To forskellige mikroarkitekturer, der kan udføre en udvalgt delmængde af MIPS ordresættet skal designes, implementeres og analyseres. Den ene mikroarkitektur skal have en enkelt-cyklus datavej, imens den anden skal være pipelinet. Begge mikroarkitekturer skal implementeres i Kreds. 3 MIPS ordresæt Begge mikroarkitekturer skal kunne udføre følgende MIPS maskinkodeordrer: 1
Kategori R-type Hop I-type Lagertilgang Særligt Ordrer add, sub, slt, and, or beq, bne, jr, jal, j addi, slti, andi, ori lw, sw stop Ordren stop er ikke en rigtig MIPS ordre, men en ordre tilføjet til brug i opgaverne på Maskinarkitektur. Den indkodes som FC000000 hexadecimalt. Indkodningen af de øvrige ordrer fremgår af COD [1], side 153 og Appendix A. Udførelse af stop ordren afslutter simulationen. Der skal ikke undersøges for overløb (i forbindelse med add, sub eller addi) eller genereres exceptions. Dog skal slt og slti altid fungere korrekt. Bemærk at ordrerne addi og slti anvender fortegnsforlængelse af den indlejrede 16-bit konstant, mens andi og ori anvender nul-forlængelse. 4 Enkelt-cyklus mikroarkitektur Der skal implementeres en enkelt-cyklus mikroarkitektur som beskrevet i COD afsnit 5.1 til 5.3. Især henledes opmærksomheden på at figur 5.29 side 372 i COD kan anvendes som udgangspunkt. Bemærk at I-typeordrerne samt bne, jr og jal ikke kan udføres af denne mikroarkitektur, hvorfor den må udvides til også at kunne håndtere disse. Til implementationen skal hardware- og simulationssproget Kreds anvendes. Installationen af Kreds på DIKUs førstedelssystem er beskrevet i kursusbogen [2] samt på kursets hjemmeside. Der skal implementeres en aritmetisk-logisk enhed (ALU) som en sammensat byggeklods i Kreds. Byggeklodsen skal have antal databit (=størrelse) som parameter. Benyt interfacet som er beskrevet i eksempel 6.6 i kursusbogen, men erstat implementationen med en der resulterer i en bedre ydelse. Byggeklodsen IdealMemIOSys skal anvendes til data- og programlager. Konfigurer byggeklodsen til at have en tilgangstid på 5 ns. Bemærk at udførelse af en hent-ordre (lw), der læser fra adresse FFFFFFF0 fører til indlæsning fra tastaturet, mens udførelse af en gem-ordre (sw), der skriver til adresse FFFFFFF4 fører til udskrivning til skærmen; se også eksempel 3.13 i kursusbogen. Simulationen stoppes ved at anvende SimSysCtrl byggeklodsen, som er beskrevet på side 91 i kursusbogen. 2
5 Pipelinet mikroarkitektur Der skal også implementeres en pipelinet mikroarkitektur med genveje (eng: forwarding) som beskrevet i COD afsnit 6.1 til 6.6. Det anbefales at tage udgangspunkt i figur 6.30 side 470 i COD og inkrementelt udvide mikroarkitekturen. Datavejen (excl. arbejdslager og cache) må maximalt bruge 200.000 transistorer; dette tal oplyses af Kreds/SimSys ved kørsel. Data- og programlager implementeres ved brug af byggeklodsen MemIOSys. Som udgangspunkt kan følgende instantiering af lageret benyttes: mem{memiosys 7 5 5 100 3 0} Latenstiden for læsning af et enkelt maskinord fra lageret er 100 ns, mens latenstiden for læsning af efterfølgende ord fra lageret er 3 ns. Desuden skal størrelsen af ordreporten være 4 bytes. Cache-parametrene kan vælges frit under den betingelse, at transistorforbruget er maximalt 500.000 transistorer. Dette tal oplyses af Kreds/SimSys ved anvendelse af option -v til jeres simulationsprogram. Hvis I ikke benytter ovennævnte cache-parametre, skal I kort kommentere jeres valg. 6 Værktøj og testprogrammer Til hjælp til besvarelse af opgaven stilles følgende faciliteter (udover Kreds) til rådighed: masm, en makroassembler der oversætter fra symbolsk maskinsprog (filer med suffix asm ) til et format kaldet hex-kode (filer med suffix hex ). mips, en referencesimulator for en delmængde af MIPS maskinsproget. mips læser og udfører filer genereret med masm. Endvidere kan mips bruges til at lave filer med spor af udførelsen. Disse filer kan så bruges af Kreds til at validere udførelsen. Disse faciliteter er nærmere beskrevet på kursets hjemmeside. 3
7 Krav til besvarelsen 7.1 Generelt Der lægges især vægt på velargumenterede og velbeskrevne metoder og valg. Desuden lægges der vægt på korrektheden af den implementerede enkelt-cyklus mikroarkitektur, og nogen vægt på korrektheden af den pipelinede miktroarkitektur. Der lægges kun begrænset vægt på mikroarkitekturernes ydeevne men man bør redegøre for klare ydelsesmæssige svagheder i det valgte design. Udover udskrifter må rapporten maksimalt fylde 30 sider. 7.2 Sporfacilitet Til verifikation af maskinarkitekturernes korrekthed skal spor-faciliteten i Kreds anvendes. Denne facilitet er beskrevet afsnit 5.6 i kursusbogen. Skrivning til registrene kan valideres ved brug af byggeklodsen ValidateWrite. Skrivning til lager og I/O vil automatisk blive valideret af hukommelsesbyggeklodserne IdealMemIOSys og MemIOSys, hvis spor-faciliteten anvendes. Bemærk at hvis spor-faciliteten anvendes, vil Kreds ikke læse fra tastaturet og skrive til skærmen, men i stedet foretage indlæsning fra spor-filen, og validere udskrivning ved hjælp af spor-filen. 7.3 Signalforsinkelser Klokcyklustiden bestemmes af de længste signalveje i mikroarkitekturen. Ved at analysere signalforsinkelser kan man få et indtryk af, hvordan ændringer i mikroarkitekturen kan påvirke klokcyklustiden. Kreds/SimSys ressourcemodel skal bruges til at undersøge kvaliteten af den udarbejdede mikroarkitektur. De signalveje og komponenter der er bestemmende for mikroarkitekturens maximale arbejdsfrekvens skal udpeges. Signalveje og komponenter der er relativt tæt på at være bestemmende for klokcyklustiden skal også udpeges. Overvej hvordan den længste signalvej kan afkortes; denne overvejelse kan undlades hvis dette spørgsmål allerede er behandlet under beskrivelsen af designet. 4
7.4 Test- og benchmarkprogrammer Til brug for indkøring udleveres nogle testprogrammer, der skal simuleres med de udviklede mikroarkitekturer. Disse testprogrammer er tilgængelige på kataloget /usr/local/del1/dat-ark/k/tests/ Begge implementerede mikroarkitekturers ydeevne skal herudover kvantificeres ved hjælp af benchmarks placeret i kataloget /usr/local/del1/dat-ark/k/benchmarks/ Alle benchmarks skal afvikles på de udviklede mikroarkitekturer og for hver benchmark skal antallet af udførte ordrer 1, antallet af klokcykler, CPI og simuleret udførelsestid rapporteres. Desuden skal samlet simuleret udførelsestid og CPI for alle benchmarks rapporteres. Ydeevnen af enkelt-cyklus arkitekturen kontra den pipelinede arkitektur skal kommenteres kort. For den pipelinede mikroarkitektur skal variationer fra benchmark til benchmark forklares. Det kan være en fordel at foretage en opdeling af CPI bidragene for bedre at kunne relatere dem til specifikke ordrer eller ordresekvenser. Som bilag vedlægges udviklet kildetekst og udskrift af kørsler ved anvendelse af spor-faciliteten i Kreds af de udleverede testprogrammer og benchmarks. 8 Gode råd 8.1 Spørgetime Der afholdes en spørgetime om opgaven tirsdag 28. september 2004 kl. 9.15 i Aud. 3, HCØ. 8.2 Nyhedsgruppe Kurset har sin egen nyhedsgruppe, diku.datark, der er beregnet som elektronisk diskussionsforum for problemstillinger knyttet til kurset. Instruktorer og lærere læser indlæg i denne gruppe regelmæssigt, og bidrager gerne med opklaring af spørgsmål m.v. Brug nyhedsgruppen. 1 Antallet af udførte ordrer for et givet program findes nemmest ved brug af referencesimulatoren mips. 5
8.3 Kreds På kursets hjemmeside vedligeholdes en fortegnelse over opdateringer til Kreds oversætteren, herunder rettelser til kursusbogen. Disse sider opdateres efter behov og bør besøges hyppigt, især i rapportperioderne. Fejl i Kreds eller kursusbogen bedes indberettet som beskrevet på hjemmesiden, mens andre spørgsmål kan bedre stilles i nyhedsgruppen. 8.4 Vink til implementationsrækkefølge Vi anbefaler, at de forskellige dele implementeres i følgende rækkefølge: 1. Lav byggeklodsen for den aritmetisk-logisk enhed (ALU), og afprøv denne omhyggeligt. Vær især omhyggelig med at afprøve, om operationen set-on-less-than virker efter hensigten. 2. Implementer enkelt-cyklus mikroarkitekturen. Tag udgangspunkt i figur 5.29 i COD og udvid denne, så alle de krævede ordrer bliver understøttet. 3. Påbegynd implementationen af den pipelinede mikroarkitektur ved at tage udgangspunkt i enkelt-cyklus arkitekturen. Brug MemIOSys byggeklodsen i stedet for IdealMemIOSys. Tilføj styrelogik nødvendig for at stoppe pipelinen, når holdandwait signalet er højt. 4. Test funktionaliteten ved at tilføje nop ordrer til nogle af de udleverede testprogrammer, således at I undgår hazards. 5. Tilføj forwarding og hazard detektion. Færdiggør styrelogik til håndtering af hop. Det er nu muligt at afvikle testprogrammer og benchmarks på maskinen. 6. Udfør alle benchmarks på begge mikroarkitekturer. Opsaml data og opstil disse i en overskuelig tabel. Lav tegninger af jeres mikroarkitekturer undervejs, og overbevis jer om at de virker. Tegninger siger som bekendt mere end 1000 ord, og de er lettere at forstå end tekstlige beskrivelser. Udskriv gerne jeres design på A3 og vedlæg til rapporten. Lav små testprogrammer (i MIPS assembler) som afprøver alle de hazards I kan finde i jeres pipelinede arkitektur. Hvis I finder fejl i jeres design under 6
afprøvningen, gå tilbage til jeres beskrivelse af arkitekturen og se/beskriv for hinanden hvad I havde overset og ret så beskrivelsen til. Lav et testprogram som viser fejlen og tilføj det til jeres "testsuite". KISS ( Keep It Simple, Stupid ). Først når den simple løsning virker, kan man prøve at være smart (hvis man har tid nok). Litteratur [1] David A. Patterson og John L. Hennessy: Computer Organization and Design, 2nd ed., Morgan Kauffman 1998. ISBN 1-55860-491-X. [2] Signe Reuss og Martin Zachariasen: Kreds, Kursusbog i Maskinarkitektur, DIKU 2004. 7