Introduction to Computer Organization
Summer, 2008

CDA 3101
Announcements

 
Last updated Tue Aug 5 2008 at 17:41:11 EDT
Aug 5 at 17:41

No discussions for the remainder of the semester (including tomorrow). Class will be held as usual.

Aug 4 at 19:22

If you left your tacklebox behind after class today, go to CSE E301 during regular business hours to claim it.

Jul 23 at 09:47

Reminder: colored writing utensils are required on the remaining quizzes. See the syllabus for details.

Jul 22 at 17:41

On quiz 5, if any of the problems require it, I will provide a list of the control line names. You will still need to know what each one controls, though.

Jul 20 at 22:49

The term paper description is now online.

Jun 30 at 22:18

As promised...

BTW, because of the quiz on Wednesday 7/9, I decided to be nice and pushed back the due date I'd announced in class for program 3. Use the extra time wisely. Don't wait until Sunday to get started—remember, the TA and I don't have office hours over the weekend!

Jun 30 at 21:22

Here's the stack frame convention we are using.

Jun 18 at 09:38

The two exercises at the end of the pdf I posted Friday night are practice problems, not collected homework.

Jun 17 at 01:26

Here is a revised Box-n-Pointer diagram for the statements we got hung up on in class. Enjoy the cool retro ascii art ;)

BEFORE:

       [  b  |  a  |  t  |  \0  |  c  |  a  |  t  |  \0  |  r  |  a  |  t  |  \0  ]
       sa1a+0   +1    +2    +3  sa1b+0   +1    +2    +3  sa1c+0   +1    +2    +3
          ^                        ^                        ^
          |                        |                        |
          |     +------------------+                        |
          |     |     +-------------------------------------+
          |     |     |     
  sa1: [  *  |  *  |  *  ]
       [sa1a |sa1b |sa1c ]
       sa1+0   +1    +2

char **x = sa1;
*(*(x + 1) + 2) = 'm';

Lefthand side...

   (x + 1)      == sa1 + (1 * 4)
  *(X + 1)      == MEM[ sa1 + (1 * 4) ] == sa1b
 (*(x + 1) + 2) == sa1b + (1 * 2)
*(*(x + 1) + 2) == MEM[ sa1b + (1 * 2) ]

which gives us...

      MEM[sa1b+2] := 'm'

AFTER STATEMENT EXECUTED:
                                            
       [  b  |  a  |  t  |  \0  |  c  |  a  |  m  |  \0  |  r  |  a  |  t  |  \0  ]
       sa1a+0   +1    +2    +3  sa1b+0   +1    +2    +3  sa1c+0   +1    +2    +3
          ^                        ^                        ^
          |                        |                        |
          |     +------------------+                        |
          |     |     +-------------------------------------+
          |     |     |     
  sa1: [  *  |  *  |  *  ]
       [sa1a |sa1b |sa1c ]
       sa1+0   +1    +2

----------------------------------------------------------------------------------------------------

The next statement is trickier because from a C perspective, sa2 is
the CONTENTS of the memory location we've labeled "sa2" (unlike the
previous example where the symbol sa1 is used the same way in both the
C and MIPS code).

BEFORE:
       [  h  |  a  |  t  |  \0  |  m  |  a  |  t  |  \0  |  s  |  a  |  t  |  \0  ]
       anon0+0  +1    +2    +3  anon1+0  +1    +2    +3  anon2+0  +1    +2    +3
          ^                        ^                        ^
          |                        |                        |
          |     +------------------+                        |
          |     |     +-------------------------------------+
          |     |     |     
       [  *  |  *  |  *  ]
       [anon0|anon1|anon2]
       anon3+0  +1    +2
          ^
          |
  sa2: [  *  ]          Note: This diagram is drawn from the MIPS implementation
       [anon3]


*(sa1 + 2) = *(sa2 + 1);   <-- the original C code
*(sa1 + 2) = *(*sa2 + 1);  <-- the transformed C code: matches how we implemented it in 
                               MIPS using a memory location to represent the VARIABLE
                               pointer sa2
Right hand side...

  *sa2       == anon3
 (*sa2 + 1)  == anon3 + (1 * 4)
*(*sa2 + 1)  == MEM[ anon3 + (1 * 4) ] == anon1

Lefthand side...

  sa1       == sa1               <-- it's a symbolic address
 (sa1 + 2)  == sa1 + (2 * 4)
*(sa1 + 2)  == MEM[ sa1 + (2 * 4) ]

which gives us...

      MEM[ sa1 + (2 * 4) ] = anon1

AFTER STATEMENT EXECUTED:

       [  b  |  a  |  t  |  \0  |  c  |  a  |  m  |  \0  |  r  |  a  |  t  |  \0  ]
       sa1a+0   +1    +2    +3  sa1b+0   +1    +2    +3  sa1c+0   +1    +2    +3
          ^                        ^
          |                        |
          |     +------------------+ 
          |     |
          |     |
  sa1: [  *  |  *  |  *  ]
       [sa1a |sa1b |anon1]
       sa1+0   +1    +2
                      |
                      +------------+
                                   |
                                   V
       [  h  |  a  |  t  |  \0  |  m  |  a  |  t  |  \0  |  s  |  a  |  t  |  \0  ]
       anon0+0  +1    +2    +3  anon1+0  +1    +2    +3  anon2+0  +1    +2    +3
          ^                        ^                        ^
          |                        |                        |
          |     +------------------+                        |
          |     |     +-------------------------------------+
          |     |     |     
       [  *  |  *  |  *  ]
       [anon0|anon1|anon2]
       anon3+0  +1    +2
          ^
          |
  sa2: [  *  ]          Note: This diagram is drawn from the MIPS implementation
       [anon3]
Jun 17 at 00:10

Here's the promised follow-up to Monday's lecture. It has a couple additional exercises for you to try as an added bonus! Don't forget that IEEE754 FP numbers are fair game for the quiz.

Jun 16 at 20:08

Program 1 is due Wednesday.

Jun 11 at 16:50

Here's a link to SPIM's homepage

Jun 10 at 16:10

On the program, limit yourself to the instructions we have covered in class. No others are needed (nor desirable).

Jun 9 at 22:13

Program 0 is due Friday.

May 30 at 23:27

Suggested exercises [not collected]

May 30 at 22:59

HW #1: due Wednesday

This exercise is about critically evaluating data; responses that do not reflect a critical appraisal are worthless.

  1. Read John L. Larson's Benchmarketing: The Art of Selling Inferior Goods
  2. Scour the web and find 6 [2 CPU, 2 GPU, 2 System] recent (no more than 2 years old) good examples of the misuse of benchmarks. Print the page. For each one, explain why it is an abuse/misleading. If it does a direct comparison with another device, which of Larson's 10 techniques was used? Justify your answer.
  3. Scour the web and find 6 [2 CPU, 2 GPU, 2 System] recent (no more than 2 years old) good examples of the fair use of benchmarks. Print the page. For each one, explain why it is not an abuse of benchmarking/misleading.
  4. Visit SPEC website and read the description of the CPU2006 benchmark. For what kind of user might it be a good benchmark? Justify your answer (200 word minimum).
May 21 at 16:31

TA office hour change

Joshua is moving his Thursday hours to 3-5pm. The syllabus has been updated accordingly.

Suggested exercises

May 16 at 10:04

The syllabus has been updated with the TA's office hours and quiz dates have been scheduled.

May 12 at 11:33

Welcome to CDA 3101! Check this site regularly for the latest announcements: for instance... Discussion sessions will not meet this week. If you haven't done so already, please read the syllabus and course policies.

The mandatory biosketch assignment is due at the start of lecture on Monday 5/19. If you've written one previously, take the opportunity to tell me something new about yourself. (Should you be interested in such things, you can read Dave: fact or fiction?.)

This website is an original work, Copyright © 2008 by Dave Small. All rights reserved.