Topics covered (briefly): mentioned test-and-set atomic instruction, where a processor gains exclusive use of the memory for the entire duration of the instruction; multiprocessors and cache coherency; snoopy caches.
Making a machine a multiprocessor slows down the hardware. The software incurs the mutual exclusion mechanism overhead as well as extra context switch overhead when the number of threads exceed the number of real processors. Furthermore, some problems inherently do not have much parallelism. So whether multithreading actually will increase performance depends on many factors (especially whether the program actually runs on a multiprocessor).
DeMorgan's Thm. Example of converting C code
if ((a && b) || c) { ... body ... } ... rest ...to assembly by repeated application of DeMorgan's Thm. The main point is that the ``natural'' logical operation in a sequence of if ... goto (beq, blt, etc) instructions is OR. Through a series of transformations, the above turns into:
if !a goto L2 if b goto L0 L2: if !c goto L1 L0: ... body ... L1: ... rest ...In addition to DeMorgan's Thm, we also made the following transformation, where
if x then L0 j L1 L0: ... stuff ... L1: ... rest ...is optimized into
if !x then L1 ... stuff ... L1: ... rest ...
The final is open notes, open book.
bsy@cse.ucsd.edu, last updated