These are Dave Patterson's comments about CS61C, "Machine Structures," taught at U.C. Berkeley in Spring 1999. Some notes are from before I started lecturing, but most are as a result of the lectures. I suggest reading them if you are going to teach the material and try to use the lecture slides.

CS61C is a large class, almost all freshmen and sophomores, that requires a cadre of Teaching Assistants and Readers to manage the class. The assignments are broken into things completed in scheduled computer labs, homework exercises, and larger projects, plus midterm and final. They have taken one intro course based on Abelson and Sussman in Scheme (CS61A), and may or may not have taken a data structures course in Java (CS61B). They are required to know how to write a recursive program in C, C++, or Java. They are expected to learn some C as part of 61C.

Prior versions had 2 midterms and 1 final, but to reduce the workload on the teaching staff to makeup and grade the exams, I limited it to 1 midterm. This gave enough time for TA's to help make up the questions, which is good for them. We started about 3 weeks before the exam, and I think this gave us time to get a fairly-well debugged midterm and final. The questions that we didn't use we placed on the practice midterm and final.

As the goal is education, its great to find effective ways for students to study on their own to prepare for the exam. Old tests, practice exams, and review sessions all help them learn the material.

I was satisfied that 1 midterm + 1 final, given all the support infrastructure for each exam, was sufficient for grading and made the class better for everyone

Labs

List of 11 labs

Favorite

Least Favorite

1. First MIPS program

35

20

2. Second, Third MIPS functions: translate multiplier routines

9

12

3. Fourth MIPS program: sum of array function

26

58

4. Debugging: find at least 2 errors in MIPS program

8

16

5. First part of Project 3, instruction interpretation

16

4

6. Polling I/O lab

15

4

7. (midterm survey; choice not available)

8. Network Examples: ping, traceroute

66

24

9. Program to find cache parameters

32

15

10. Processes, virtual memory, physical memory, swap space

8

49

11. MIPS vs. HP vs. Intel instruction sets: CPI, optimized vs. unopt code

24

31

 

Projects

List of 6 projects (plus goals)

Favorite

Least Favorite

1. Philspel (learn C)

32

101

2. Disassembler (learn MIPS format and practice C)

30

29

3. Instruction Interpreter (understand interpretation, learn MIPS, and practice C)

53

10

4. Interrupt Handler in MIPS (understand interrupts vs. polling, practice MIPS)

46

34

5. Cache Simulator (understand caches, and practice C)

57

52

6. Sprintf in MIPS (Review of parameter passing, understand how C is implemented, practice MIPS)

39

26

Assignments

One issue is keeping on top of the readers to get things back in a timely fashion, especially

Initial Lab/Project Ideas

 

an AMAZING amount of time, but I'm sure I will get my reward for reuse in later course offerings (and probably helping other instructors in cyberspace as well), so I don't mind as much.

Grand total was 926 slides, or more pages than in COD

My class has 370 students (!) in the 5th week of classes, so part of challenge is administrative as well.

Notes from teaching class.

Big Ideas

lost!

significant questions

understand well

know very well

Principle of abstraction

3

20

117

143

Pliable Data

13

27

87

157

Stored program concept

1

26

89

167

Principle of Locality

11

76

128

68

Exploiting parallelism

11

83

128

62

Performance measurement

14

100

125

43

Seems like it wored well; only 1 with many questions was performance measurement, and we only spent 1 lecture on the topic

Review lecture survey

waste of time

marginal

helpful

very helpful!

Review lectures in general

6

58

152

63

Stack passing review lecture

6

51

157

57

Cache/VM/TLB review lecture

3

59

162

47

Polling/interrupt review lecture

3

38

102

20

Midterm review

13

62

114

73

 

Little Topics

lost!

significant questions

understand well

know very well

C/Asm Operations, operands

2

11

101

162

C/Asm Decisions

2

22

110

148

C/Asm constants

2

22

107

152

C/Asm Procedures, register conventions

2

19

126

136

C/Asm Procedures, stack v. heap v. static

8

71

148

56

Addressing modes

2

54

156

68

C/Asm pointers

7

51

137

88

C/Asm Characters, Strings

2

38

141

101

2's complement

1

16

113

153

Logical operations: shift, and, or

1

11

107

164

Floating point

9

51

159

63

Polling I/O

9

74

136

64

Interrupt I/O

9

86

144

44

Storage Devices

6

59

162

56

LRU

17

53

120

91

Direct Mapped/Set Associative/Fully Associative

10

50

142

81

TLB

38

123

85

35

Paging

34

120

106

23

Datapath block diagram

21

108

120

33

ALU

18

83

132

48

Multiply

18

79

142

44

Divide

21

91

136

35

Latency vs. Throughput

8

97

129

49

CPI

10

67

141

65

Pipelined Instruction Execution

9

76

137

61

Structural Hazards

11

95

142

35

Control Hazards

11

93

144

36

Data Hazards

10

93

143

38

Branch Prediction

12

108

123

39

Delayed Branch

13

110

117

43

Forwarding

16

87

135

45

Load-use Hazard

37

133

88

24