Hey Folks,
ich bin gerade am Lernen für eine Prüfung und habe folgenden
Programmausschnitt vorliegen :
addi $t1, $zero,-4
marker beq $t1, $zero, out
addi $t1, $t1, 1
j marker
out jr $ra
Was das Programm einigermaßen leistet ist mir klar. Doch wie kann ich
bestimmen wieviele Takte die Ausführung in einem Single Cycle benötigt?
Vielen Dank für jegliche Hilfe. :)
Karl M. schrieb: > Ins Datenblatt der CPU schauen, so würde ich das machen.. wozu, was willst du doch rauslesen. "Single Cycle" bedeutet doch vermutlich, jeder OpCode eine Takt. > Doch wie kann ich > bestimmen wieviele Takte die Ausführung in einem Single Cycle benötigt? einfach zusammenzählen.
Indem Du das Programm im Kopf durchspielst und zählst, weiviele Programmzeilen Du durchlaufen hast. Eventuell musst Du schauen, ob ein Branch 2 Cylen bedeuted, dann bitte für jeden Branch noch einen dazuzählen.
Peter II schrieb: > "Single Cycle" bedeutet doch vermutlich, jeder OpCode eine Takt. Da würde ich dringend nochmal in die Definition schauen. Oftmals gilt das nur für ALU Befehle, Sprünge dauern bei realen µProzessoren oft länger.
Jim M. schrieb: > Oftmals gilt das nur für ALU Befehle, Sprünge dauern bei /realen/ > µProzessoren oft länger. Um reale Prozessoren geht es hier aber eher nicht. :-)
Dann guck in den Unterlagen und Folien der Vorlesung nach! Da wird das dann stehen. Das sieht nämlich nach MIPS Assembler aus, den MIPS gibts in der realen Welt aber nicht als SingeCycle, also muss der Prof dazu was gesagt haben.
Ich hab nix von Lösungen gesagt, sondern von Folien und Unterlagen. Da wird doch wohl was stehen?
das sieht dann wohl nach dem Fall für eine Sprechsstunde beim Prof/WiMi/Tutor aus. Da es, wie oben geschrieben, den Single Cycle MIPS nicht gibt, kann der Prof da sonstwas definiert haben wie 3 oder 2 Takte für nen Sprung.
Mw E. schrieb: > > Das sieht nämlich nach MIPS Assembler aus, den MIPS gibts in der realen > Welt aber nicht als SingeCycle, also muss der Prof dazu was gesagt > haben. MIPS ist sehr wohl single cycle. Ist ja der Gag an RISC bzw. dem branch delay slot des MIPS.
@Fitzebutze Wer keine Ahnung hat sollte die Klappe halten! MIPS ist Pipelined. Daher sieht die execution Time aus wie Single Cycle, da meist jeden Takt ein Befehl fertig wird. Im AVR Datenblatt steht nämlich auch was von "Most Single-clock Cycle Execution" und unter der CPU Core Beschreibung sieht man dann, dass die Kiste Pipelined ist. Wenn eine CPU Single Cycle ist dann ist auch immer nur ein Befehl auf der CPU.
das sind anscheinend 15 takte.. habe nen kollegen nach der lösung gefragt.. aber wie kommt man darauf?
Matze schrieb: > das sind anscheinend 15 takte.. habe nen kollegen nach der lösung > gefragt.. aber wie kommt man darauf? Indem man die Schritte nachvollzieht.
Matze schrieb: > das sind anscheinend 15 takte.. habe nen kollegen nach der lösung > gefragt.. aber wie kommt man darauf?
1 | Befehl Aktion Takt |
2 | ---------------------------------------------------- |
3 | addi $t1, $zero,-4 $t1:=-4 1 |
4 | marker beq $t1, $zero, out -4!=0 2 |
5 | addi $t1, $t1, 1 $t1:=-3 3 |
6 | j marker 4 |
7 | marker beq $t1, $zero, out -3!=0 5 |
8 | addi $t1, $t1, 1 $t1:=-2 6 |
9 | j marker 7 |
10 | marker beq $t1, $zero, out -2!=0 8 |
11 | addi $t1, $t1, 1 $t1:=-1 9 |
12 | j marker 10 |
13 | marker beq $t1, $zero, out -1!=0 11 |
14 | addi $t1, $t1, 1 $t1:=0 12 |
15 | j marker 13 |
16 | marker beq $t1, $zero, out 0==0 14 |
17 | out jr $ra 15 |
einfach im Kopf durchsteppen. Wobei dieser Code in der Realität nie laufen würde, weil MIPS nach jedem Sprung noch einen Delay Slot hat. Wenn hinter jeden Sprung (beq, j, jr) noch ein nop kommt, würde es funktionieren. Dabei kommen natürlich noch Zyklen dazu. fchk
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.