Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 3 » CISC/RISC   (Übersicht)

Prüfung: Rechnerarchitektur (7.5 ECTS) Prüfer: Prof. Dr.-Ing. Dietmar Fey, Beisitzer Sebastian Rachuj Note: 1.3 (schwankte zwischen 1.3 und 1.7 - Wegen regelmaesigen Uebungsbesuch dann 1,3)

Lockere Atmosphaere, leider ca. 20 Minuten spaeter als geplant angefangen.

CISC/RISC

P: Was ist CISC?

Erklaert, dass es viele verschiedene Adressmodi gibt, Instruktionen ungleich lang sind.

P: Was ist RISC?

Befehle gleich lang, einfache Adressmodi.

P: Warum ist man von CISC weg?

Wegen Pipeling. Die Patterson Studie hab ich dann auf Nachfrage erwaehnt.

Pipelining

P: Wie schaut denn so eine Pipeline aus?

Pipeline mit BH,BD,OP,EX und RS hingemalt und gesagt, dass nachfolgende Befehle Ressourcen verwenden koennen die vorhergehende nicht mehr brauchen.

P: Warum kann man mit CISC nicht so gut Pipelinen?

Unterschiedliche Befehlslaenge macht BH/BD komplizierter (hier vielleicht auch erwaehnen, dass OP auch komplizierter wird, hab ich nicht gemacht). Manche Befehle brauchen sehr lang, das macht eine gleichmaeßige Taktung der Pipeline schwierig.

P: Werden Befehle durch die Pipeline jetzt schneller ausgefuehrt?

Nein, die Latenz geht rauf, der Durchsatz auch.

Hier hatt er mich dann auch gefragt ob sich der Takt durch Pipelining aendert, hab ich gemeint ja, weil der Strom nicht mehr so weit fliessen muss.

P: Warum geht die Latenz rauf?

Ich hatte erst gemeint wegen den Pipelinestufen, richtig waere wegen den Registern die zwischen die Stufen gebaut werden muessten. Ich habe dann noch die Formel fuer den Speedup hingemalt und erklaert, hatte ausversehen k * (n - 1) statt k + (n - 1) hingeschrieben.

P: Warum verwendet man dann nihct gleich 1000 Pipelinestufen?

Zu hoher Energieverbrauch (ich hab mir eingebildet, dass des irgendwo auf den Folien stand), weils teuer ist und wegen den Hazards, da gibt's Strukturhazards, Datenhazards, RAW, WAW, WAR.

P: Was sind denn Strukturhazards?

Wenn zwei Befehle gleichzeitig auf die gleiche Hardware (besser: Ressourcen, ist mir aber nicht eingefallen) zugreifen.

Steuerungshazards

P: Wie entstehen denn Steuerungshazards?

Durch bedingte und unbedingte Spruenge.

P: Warum ist das nicht gut?

Bei einem Sprung weiß man nicht welcher Befehl als naechstes in die Pipeline geladen weden muss und eventuell muss die Pipeline geflusht werden.

P: Wann wissen wir bei bedingten Spruengen wo wir hinspringen?

Hier musste ich kurz ueberlegen, bin dann aber daraufgekommen, dass des in der EX Phase passiert.

P: Und bei unbedingten?

Hier war ich mir nicht sicher, bin auch nicht gleich drauf gekommen, meinte erst in OP (wegen der Zieladresse). Er wollte aber hoeren dass mans in der BD Phase machen kann und dann nur einen Takt verliert.

P: Wie kann man Steuerungshazards verhindern?

Durch statische Methoden: branch taken/not taken und durch dynamische Methoden mit History Bits zb.

P: Sind das alle statischen Methoden?

Hier war ich ziemlich ueberrascht von der Frage und mir nicht gleich klar was er meinte.

P: Wie gut werden wir denn mit statischen Methoden?

Schon ziemlich gut. (hier hat er mich dann unterbrochen und 75% gesagt)

P: Nimmt man immer branch taken, oder ist das Instruktionsabhaengig?

Bei JNE trifft die Bedingung ja haefiger ein, deswegen wuerde man hier branch taken machen. Bei JE genau andersherum.

P: Dann hatten wir ja noch andere Sachen, z.B. den Branch Loop Buffer.

Ja, das ist ein kleiner Instruktioscache zwischen dem großen Instruktionscache und dem Instruction Register, die Idee ist, dass das innere einer Schleife darin gespeichert wird und dann schnell verfuegbar ist.

P: Dann gabs da noch den Branch History Buffer.

Da werden mit paar Bits fuer jeden Sprung gespeichert ob gesprungen wurde oder nicht, es gibt da auch noch den Branch Target Buffer in dem man gleich Informationen ueber das Sprungziel speichern kann. Die History Bits werden dann fuer eine State Machine verwendet. (Die State Machine mit Uebergaengen hingemalt). Hier hab ich gemeint, dass es zwei Moeglichkeiten gibt, entweder geht man von Weakly Taken nach Strongly Not Taken oder nach Weakly Not Taken (ich war mir sicher, dass es in den Folien beide Versionen gab). Er hat aber gemeint, dass man eher von WT nach SNT gehen wuerde. (Das hat er mir danach in der Notenbesprechung auch nochmal angekreidet)

P: Wofuer sind mehrere History Bits gut?

Fuer innere Schleifen. Wir machen dann immer einen Fehler weniger.

P: Wie viele Misspredictions machen wir dann bei inneren Schleifen?

Zwei. Eine am Anfang und eine am Ende. Beim zweiten Druchlauf dann nur noch eine.

P: Und wenn wir in SNT anfangen?

Dann zwei am Anfang.

P: Und eine am Ende also drei.

Multicore

P: Warum haben wir denn Multicore?

Formel fuer P_diss hingemalt und erklaert und gemeint, dass wir die Transistoren kleiner machen koennen ohne P_diss zu erhoehen.

P: Wenn wir jetzt einen Skalierungsfaktor von 1/s haben, wie veraendern sich dann die ganzen Groeßen?

Das hab ich nicht gelernt und hab hier paar Fehler gemacht. Richtig ist, dass \rho um s^2 rauf geht, f um s, C weiß ich nicht mehr und V_dd runter (denk ich). Am Ende kommt dann +- Null raus.

P: Warum kann man das ganze heute nicht mehr machen?

Weil man aus physikalischen Gruenden eine gewisse Grundspannung braucht und f und V_dd korrellieren. Auf Nachfrage dann noch gesagt, dass Architekturmaßnahmen auch ausgereizt sind (Sprungvorhersage > 95%). Am besten gleich sagen.

P: Da gabs aber dann noch einen Grun fuer Multicore.

Pollacks Regel: Rechenleistung = Komplexitaet^(1/2). Also bei doppelter Komplexitaet nur eine Leistungsteigerung von 40%. Rueckwaertsangewandt kriegen wir dann aber mehr Rechenleistung (Bis zu 100% mehr Leistung bei Halbierung der Komplexitaet)

GPUs

P: Wo hat man das ganze dann auf die Spitze getrieben?

Bei GPUs. Bestehen aus vielen sehr sehr einfachen Prozessoren die immer alle das gleiche machen.

P: Da gibt's ja dann sowas wie SIMT?

Single Instruction Multiple Thread. Durch einen Befehl machen alle Threads das gleiche (Besser: Alle Threads machen die gleiche Instruktion)

P: Dann gibt's ja da noch etwas anderes wo nur mit einem Befehl mehrere Daten verarbeitet werden.

SIMD, nach der Flynnschen Klassifikation.

P: Was meint das?

Bezieht sich auf Vektorrecheneinheiten.

P: Zeichnen sie doch mal eine GPU.

Hingemalt, mit großem VRAM rechts und links die MultiProzessoren mit dem Shared Memory und den kleineren StreamingProzessoren. Noch gesagt, dass die SP ziemlich einfach sind, keine Branch Prediction oder sowas.

Eingebettete Prozessoren

P: Was ist denn der Unterschied zwischen GPPs FPGAs und ASICs?

GPPs teuer, hohe Leistungsaufnahme und flexibel. ASICs alles fest verdrahtet, geringe Leistungsaufnahme, in großen Stueckzahlen billig herzustellen. FPGAs sind dazwischen.

P: Sind ASICs denn schneller als GPPs?

In der Theorie ja, da es keinen Rechenoverhead gibt, in der Praxis werden sie aber nicht mit der hoechsten Technologie gefertigt (laut Uebung: GPPs 7nm, ASICs ~100nm)