Verständnisfrage bei einer Mips Übungsaufgabe

Gast #5669472
Lesenswert?
• ▲
▼
Hallo,
ich versuche mich gerade neben der Schule etwas mit Mips und komme 
eigentlich relativ gut klar, bei den grundlegenden Sachen. Nun habe ich 
diese Übungsaufgabe in einem Buch gefunden

"Bestimmen Sie die Anzahl der Instruktionen, die von der CPU ausgeführt 
werden" und dazu diesen Code:
li $t0 , 0
li $a0 , 5
li $s0 , 0
li $s1 , 0

for_loop :
andi $t0 , $s0 , 0x01
beq $t0 , $zero , continue
addi $s1 , $s1 , 1

continue :
addi $s0 , $s0 , 1
blt $s0 , $a0 , for_loop

Die Frage ist nun was mit "Instruktionen, die von der CPU ausgeführt 
werden" gemeint ist? Und wie dies gehen soll.
Ist es etwas wie das Zählen von Befehlen, die man nutzt um die 
potenzielle Laufzeit eines Algorithmuses zu bestimmen?

Grüße
Lina
#5669491
Lesenswert?
• ▲
▼
Lina.N schrieb:
> Die Frage ist nun was mit "Instruktionen, die von der CPU ausgeführt
> werden" gemeint ist? Und wie dies gehen soll.
> Ist es etwas wie das Zählen von Befehlen, die man nutzt um die
> potenzielle Laufzeit eines Algorithmuses zu bestimmen?

Das Programmfragment ist vollständig gegeben und es wird irgendwann 
enden, d.h. unten rausfallen. Der Sinn ist egal. Gesucht ist die Anzahl 
der in diesem Verlauf ausgeführten Befehle.
Gast #5669529
Lesenswert?
• ▲
▼
A. K. schrieb:
> Lina.N schrieb:
>> Die Frage ist nun was mit "Instruktionen, die von der CPU ausgeführt
>> werden" gemeint ist? Und wie dies gehen soll.
>> Ist es etwas wie das Zählen von Befehlen, die man nutzt um die
>> potenzielle Laufzeit eines Algorithmuses zu bestimmen?
>
> Das Programmfragment ist vollständig gegeben und es wird irgendwann
> enden, d.h. unten rausfallen. Der Sinn ist egal. Gesucht ist die Anzahl
> der in diesem Verlauf ausgeführten Befehle.

hallo A. K.
Danke für die Antwort
Also wäre die Lösung:21?
LG
Lina
#5669866
Lesenswert?
• ▲
▼
Dennis H. schrieb:
> bei MIPS gibts noch den branch delay slot.

Dazu müsste man allerdings die in der Lehre verwendete Maschine genauer 
kennen. Ich würde nicht blind drauf wetten, dass eine Lehrmaschine exakt 
mit einer realen MIPS übereinstimmt.

Gerade nicht beim Delay-Slot. Und ganz besonders nicht bei diesem Code. 
Es sein denn, die nächste Frage will wissen, warum dieser Code nicht 
funktioniert.
Gast #5669960
Lesenswert?
• ▲
▼
Dennis H. schrieb:
> bei MIPS gibts noch den branch delay slot.
>
> vielleicht magste es mal mit nem Simulator zählen.
>
> http://spimsimulator.sourceforge.net/

Hallo Dennis,
ich nutze Mars, was ja dasselbe ist.
Hier gibt es einen Zähler dafür, nur weiß ich leider nicht ob dieser 
stimmt.
Er kommt insgesamt auf 32 Instruktionen, davon 5x R-Typ und 26x l-typ.

René H. schrieb:
> Lina.N schrieb:
>> Also wäre die Lösung:21?
>
> Auf soviel komme ich auch.
>
> Grüsse,
> René

Gut, dann scheint es ja doch irgendwie zu stimmen.
Gast #5670890
Lesenswert?
• ▲
▼
Lina.N schrieb:
> Hallo,
> ich versuche mich gerade neben der Schule etwas mit Mips und komme
> eigentlich relativ gut klar, bei den grundlegenden Sachen. Nun habe ich
> diese Übungsaufgabe in einem Buch gefunden


Cool. Dieselbe Hausaufgabe hat unser Prof uns gestellt.
Aus welchem Buch hast Du die denn?
Gast #5670943
Lesenswert?
• ▲
▼
1
Annahme: $zero == 0 
2
In: Anzahl Instruktionen
3

4
Schliefendurchlauf              |     1    |     2    |     3    |     4    |     5    |
5
________________________________|In $s0 $t0|In $s0 $t0|In $s0 $t0|In $s0 $t0|In $s0 $t0|
6
                                |          |          |          |          |          |
7
li $t0 , 0                      | 1  -   0 |          |          |          |          |
8
li $a0 , 5                      | 2  -   0 |          |          |          |          |
9
li $s0 , 0                      | 3  0   0 |          |          |          |          |
10
li $s1 , 0                      | 4  0   0 |          |          |          |          |
11
                                |          |          |          |          |          |
12
for_loop :                      |          |          |          |          |          |
13
andi $t0 , $s0 , 0x01           | 5  0   0 |10  1   1 |15  2   2 |20  3   3 |25  4   4 |
14
beq $t0 , $zero , continue      | 6  0   1 |11  1   2 |16  2   2 |21  3   3 |26  4   4 |
15
addi $s1 , $s1 , 1              | 7  0   1 |12  1   2 |17  2   3 |22  3   4 |27  4   5 |
16
                                |          |          |          |          |          |
17
continue :                      |          |          |          |          |          |
18
addi $s0 , $s0 , 1              | 8  0   1 |13  1   2 |18  2   3 |23  3   4 |28  4   5 |
19
blt $s0 , $a0 , for_loop        | 9  1   1 |14  2   2 |19  3   3 |24  4   4 |29  5   5 |
Gast #5670985
Lesenswert?
• ▲
▼
eher 22. Die Schleifeninstruktion ist ein blt, damit ist die Schleife 
bei s0 = 4 vorbei, die letzten 5 Instruktionen entfallen somit. Außerdem 
ist die erste Instruktion nach for_loop kein addi, sondern andi, s1 wird 
damit nur inkrementiert, wenn s0 die Werte 1 oder 3 hat (für s0 = 0 und 
2 entfallen noch mal 2 Instruktionen). 29-5-2=22
Beitrag #5671033 wurde von einem Moderator gelöscht.
#5671089
Lesenswert?
• ▲
▼
Mit dem Simulator QtSpim kommt man auf 31 Instruktionen, wenn man mit 
single step das Programm abarbeitet.
https://sourceforge.net/projects/spimsimulator/
Version 9.1.19

Hier das Programm test.asm für den Simulator QtSpim.

main:
li $t0 , 0
li $a0 , 5
li $s0 , 0
li $s1 , 0

for_loop :
andi $t0 , $s0 , 0x01
beq $t0 , $zero , continue
addi $s1 , $s1 , 1

continue :
addi $s0 , $s0 , 1
blt $s0 , $a0 , for_loop
#5671216
Lesenswert?
• ▲
▼
A. K. schrieb:
> Mit delay slot ist das Fragment unvollständig und die Frage nicht
> beantwortbar. Häng ein "li $s0,0" in den delay slot hinter dem letzten
> Befehl und lass den Simulator dann sein Werk vollenden.

Im Simulator sind 31 Befehle, ohne die Ausführung des hinzugefügten li 
$s0,0, zum durchlaufen des Programms notwendig.

main:
li $t0 , 0
li $a0 , 5
li $s0 , 0
li $s1 , 0

for_loop :
andi $t0 , $s0 , 0x01
beq $t0 , $zero , continue
addi $s1 , $s1 , 1

continue :
addi $s0 , $s0 , 1
blt $s0 , $a0 , for_loop
li $s0,0
Persönliche Seite #5671220
Lesenswert?
• ▲
▼
A. K. schrieb:
> Mit delay slot ist das Fragment unvollständig und die Frage nicht
> beantwortbar. Häng ein "li $s0,0" in den delay slot hinter dem letzten
> Befehl und lass den Simulator dann sein Werk vollenden.

ich denk mir dann ja ein NOP automatisch nach dem Sprung.

Aber vorher wurde ja schon klar gestellt, daß es sich nur um einen 
theoretischen MIPS handelt der sowas wohl nicht hat. Also so ala RISC-V.

Ich bring halt gern meine Erfahrungen mit realen MIPS-CPU's ein :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren