+ All Categories
Home > Documents > ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Computer Organization Spring 2011 Dmitri Strukov

Date post: 23-Feb-2016
Category:
Upload: josef
View: 27 times
Download: 0 times
Share this document with a friend
Description:
ECE 15B Computer Organization Spring 2011 Dmitri Strukov. Partially adapted from Computer Organization and Design, 4 th edition, Patterson and Hennessy,. Fibonacci numbers. F(n) = F(n-1)+F(n-2) F(1) = 1 F(2) = 1 n = 1 2 3 4 5 6 … - PowerPoint PPT Presentation
21
ECE 15B Computer Organization Spring 2011 Dmitri Strukov Partially adapted from Computer Organization and Design, 4 th edition, Patterson and Hennessy,
Transcript
Page 1: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Computer OrganizationSpring 2011

Dmitri Strukov

Partially adapted from Computer Organization and Design, 4th edition, Patterson and Hennessy,

Page 2: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Fibonacci numbersF(n) = F(n-1)+F(n-2)F(1) = 1F(2) = 1n = 1 2 3 4 5 6 …F(n) = 1 1 2 3 5 8 …

/* Recursive function in c */int fib(int n) {

If (n==1) return 1;If (n==2) return 1;return fib(n-1)+fib(n-2);

}

Page 3: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

ProceduresProlog - spill all register to stack used by procedure expect for $t0-$t9 and the one used for returning values

- advance stack pointer ($sp) first then write to stackBody

code of the procedure Epilog

- restore all used registers - adjust stack pointer at the end ($sp)

Page 4: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

/* Recursive function in c */int fib(int n) {

If (n==1) return 1;If (n==2) return 1;return fib(n-1)+fib(n-2);

}

# Recursive function in MIPS assembler #prolog

FIB: addi $sp, $sp, -12sw $a0, 0($sp)sw $s0, 4($sp)sw $ra, 8($ra)# bodyaddi $v0, $zero, 1addi $t0, $zero, 1beq $a0, $t0, EPILOG #check for n==1addi $t0, $zero, 2beq $a0, $t0, EPILOG #check for n==2addi $a0, $a0, -1jal FIB #calculate fib(n-1)addi $s0, $zero, $v0 # save fib(n-1) to $s0addi $a0, $a0, -1 #calculate fib(n-2) jal FIBaddi $v0, $v0, $s0#epilog

EPILOG: lw $a0, 0($sp)lw $s0, 4,($sp)lw $ra, 8,($sp)addi $sp, $sp, 12 jr $ra

/* Recursive function in c */int fib(int n) { v0 = 1;

If (n==1) goto EXIT;If (n==2) goto EXIT;

n = n – 1;s0 = fib(n);

n = n – 1;v0 = fib(n);

v0 = v0 +s0; EXIT: return v0; }

Page 5: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

/* Recursive function in c */int fib(int n) {

If (n==1) return 1;If (n==2) return 1;return fib(n-1)+fib(n-2);

}

# Recursive function in MIPS assembler #prolog

FIB: addi $sp, $sp, -12sw $a0, 0($sp)sw $s0, 4($sp)sw $ra, 8($ra)# bodyaddi $v0, $zero, 1addi $t0, $zero, 1beq $a0, $t0, EPILOG #check for n==1addi $t0, $zero, 2beq $a0, $t0, EPILOG #check for n==2addi $a0, $a0, -1jal FIB #calculate fib(n-1)addi $s0, $zero, $v0 # save fib(n-1) to $s0addi $a0, $a0, -1 #calculate fib(n-2) jal FIBaddi $v0, $v0, $s0#epilog

EPILOG: lw $a0, 0($sp)lw $s0, 4,($sp)lw $ra, 8,($sp)addi $sp, $sp, 12 jr $ra

/* Recursive function in c */int fib(int n) { v0 = 1;

If (n==1) goto EXIT;If (n==2) goto EXIT;

n = n – 1;s0 = fib(n);

n = n – 1;v0 = fib(n);

v0 = v0 +s0; EXIT: return v0; }

Page 6: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

• Now let’s see changes in the memory (stack) and register file as we execute recursive function with n = 3

• First let’s review datapath and where code is stored

Page 7: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

Simple datapath review

ECE 15B Spring 2011

Page 8: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

Simple datapath review

ECE 15B Spring 2011

stack

instructions

Page 9: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

Where is the code stored?

ECE 15B Spring 2011

stackstack

Code (????)

static data

dynamic data (heap)

RF[$sp]

0

ANS: In main memory

Page 10: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

Instruction memory

ECE 15B Spring 2011

stack

code

static data

dynamic data (heap)

IM: Physically different memory Logically mapped to main memory

Page 11: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Direct mapped cache implementation of instruction memory

Main

Main memory

Instruction memory

At any point in time IM has a copy of a portion of main memory

Separate memory (tag) to store which location is currently mapped

0

16

24

Tag (28 bit)

If upper portion of PC (28 bit) matches tag then IM has right values (hit), otherwise stop execution and load right portion

Page 12: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 0

$a0 3

$t0 0

$s0 0

$sp 0xFFFF0000

$ra 0x0108

index value

0xFFFF0000 0x00000000

0xFFFF00FC

0xFFFF00F8

0xFFFF00F4

RF (right after execution of initial jal FIB at 0x0104)

MM (initial values in stack)

Page 13: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 1

$a0 2

$t0 2

$s0 0

$sp 0xFFFF00F4

$ra 0x102C

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

RF (after execution jal FIB at 0x1028) MM - stack

Page 14: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 1

$a0 2

$t0 2

$s0 0

$sp 0xFFFF00E8

$ra 0x102C

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

0xFFFF00F0 0x102C

0xFFFF00EC 0

0xFFFF00E8 2

RF (after execution beq at 0x1020) MM - stack

Page 15: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 1

$a0 2

$t0 2

$s0 0

$sp 0xFFFF00F4

$ra 0x102C

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

0xFFFF00F0 0x102C

0xFFFF00EC 0

0xFFFF00E8 2

RF (after execution jr at 0x104C) MM - stack

Page 16: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 1

$a0 1

$t0 2

$s0 1

$sp 0xFFFF00F4

$ra 0x1038

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

0xFFFF00F0 0x102C

0xFFFF00EC 0

0xFFFF00E8 2

RF (after execution jal at 0x1034) MM - stack

Page 17: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 1

$a0 1

$t0 1

$s0 1

$sp 0xFFFF00E8

$ra 0x1038

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

0xFFFF00F0 0x1038

0xFFFF00EC 1

0xFFFF00E8 1

RF (after execution beq at 0x1018) MM - stack

Page 18: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 1

$a0 1

$t0 1

$s0 1

$sp 0xFFFF00F4

$ra 0x1038

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

0xFFFF00F0 0x1038

0xFFFF00EC 1

0xFFFF00E8 1

RF (after execution jr at 0x104C) MM - stack

Page 19: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 2

$a0 3

$t0 1

$s0 0

$sp 0xFFFF00F4

$ra 0x0108

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

0xFFFF00F0 0x1038

0xFFFF00EC 1

0xFFFF00E8 1

RF (after execution jr at 0x104C) MM - stack

Page 20: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Recursive function execution: step by step

0x0100 addi $a0, $zero, 30x0104 jal FIB0x0108 next instruction

XXXXXXXXXXXXXXXXXXXXXX

FIB: 0x1000 addi $sp, $sp, -120x1004 sw $a0, 0($sp)0x1008 sw $s0, 4($sp)0x100C sw $ra, 8($ra)0x1010 addi $v0, $zero, 10x1014 addi $t0, $zero, 10x1018 beq $a0, $t0, EPILOG0x101C addi $t0, $zero, 20x1020 beq $a0, $t0, EPILOG0x1024 addi $a0, $a0, -10x1028 jal FIB0x102C addi $s0, $zero, $v00x1030 addi $a0, $a0, -1 0x1034 jal FIB0x1038 addi $v0, $v0, $s0

EPILOG: 0x103C lw $a0, 0($sp)0x1040 lw $s0, 4,($sp)0x1044 lw $ra, 8,($sp)0x1048 addi $sp, $sp, 12 0x104C jr $ra

index value

$v0 2$a0 3

$t0 1

$s0 0

$sp 0xFFFF00F4

$ra 0x0108

index value

0xFFFF0100 0x00000000

0xFFFF00FC 0x0108

0xFFFF00F8 0

0xFFFF00F4 3

0xFFFF00F0 0x1038

0xFFFF00EC 1

0xFFFF00E8 1

RF (at the end of program)MM - stack

Page 21: ECE 15B Computer Organization Spring 2011 Dmitri Strukov

ECE 15B Spring 2011

Is code optimal?* No need to spill registers when n = 1 and n = 2

* F(n-2) is calculated independently of F(n-1).

Better version could be (which is linear in time with n):int fib(int a, int b, int n) {if (n==2) return a; else return fib(a+b, a, n 1);‐}

…. and use fib(1,1,n)

* Even better to use for-loop or do-while ?


Recommended