| |
| |
Preface | |
| |
| |
| |
Computer Abstractions and Technology | |
| |
| |
| |
Introduction | |
| |
| |
| |
Eight Great Ideas in Computer Architecture | |
| |
| |
| |
Below Your Program | |
| |
| |
| |
Under the Covers | |
| |
| |
| |
Technologies for Building Processors and Memory | |
| |
| |
| |
Performance | |
| |
| |
| |
The Power Wall | |
| |
| |
| |
The Sea Change: The Switch from Uniprocessors to Multiprocessors | |
| |
| |
| |
Real Stuff: Benchmarking the Intel Core i7 | |
| |
| |
| |
Fallacies and Pitfalls | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Historical Perspective and Further Reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Instructions: Language of the Computer | |
| |
| |
| |
Introduction | |
| |
| |
| |
Operations of the Computer Hardware | |
| |
| |
| |
Operands of the Computer Hardware | |
| |
| |
| |
Signed and Unsigned Numbers | |
| |
| |
| |
Representing Instructions in the Computer | |
| |
| |
| |
Logical Operations | |
| |
| |
| |
Instructions for Making Decisions | |
| |
| |
| |
Supporting Procedures in Computer Hardware | |
| |
| |
| |
Communicating with People | |
| |
| |
| |
MIPS Addressing for 32-Bit Immediates and Addresses | |
| |
| |
| |
Parallelism and Instructions: Synchronization | |
| |
| |
| |
Translating and Starting a Program | |
| |
| |
| |
AC Sort Example to Put It All Together | |
| |
| |
| |
Arrays versus Pointers | |
| |
| |
| |
Advanced Material: Compiling C and Interpreting Java | |
| |
| |
| |
Real Stuff: ARMv7 (32-bit) Instructions | |
| |
| |
| |
Real Stuff: x86 Instructions | |
| |
| |
| |
Real Stuff: ARMv8 (64-bit) Instructions | |
| |
| |
| |
Fallacies and Pitfalls | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Historical Perspective and Further Reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Arithmetic for Computers | |
| |
| |
| |
Introduction | |
| |
| |
| |
Addition and Subtraction | |
| |
| |
| |
Multiplication | |
| |
| |
| |
Division | |
| |
| |
| |
Floating Point | |
| |
| |
| |
Parallelism and Computer Arithmetic: Subword Parallelism | |
| |
| |
| |
Real Stuff: Streaming SIMD Extensions and Advanced Vector Extensions in x86 | |
| |
| |
| |
Going Faster: Subword Parallelism and Matrix Multiply | |
| |
| |
| |
Fallacies and Pitfalls | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Historical Perspective and Further Reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
The Processor | |
| |
| |
| |
Introduction | |
| |
| |
| |
Logic Design Conventions | |
| |
| |
| |
Building a Datapath | |
| |
| |
| |
A Simple Implementation Scheme | |
| |
| |
| |
An Overview of Pipelining | |
| |
| |
| |
Pipelined Datapath and Control | |
| |
| |
| |
Data Hazards: Forwarding versus Stalling | |
| |
| |
| |
Control Hazards | |
| |
| |
| |
Exceptions | |
| |
| |
| |
Parallelism via Instructions | |
| |
| |
| |
Real Stuff: The ARM Cortex-A8 and Intel Core i7 Pipelines | |
| |
| |
| |
Going Faster: Instruction-Level Parallelism and Matrix Multiply | |
| |
| |
| |
Advanced Topic: An Introduction to Digital Design Using a Hardware Design Language to Describe and Model a Pipeline and More Pipelining Illustrations | |
| |
| |
| |
Fallacies and Pitfalls | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Historical Perspective and Further Reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Large and Fast: Exploiting Memory Hierarchy | |
| |
| |
| |
Introduction | |
| |
| |
| |
Memory Technologies | |
| |
| |
| |
The Basics of Caches | |
| |
| |
| |
Measuring and Improving Cache Performance | |
| |
| |
| |
Dependable Memory Hierarchy | |
| |
| |
| |
Virtual Machines | |
| |
| |
| |
Virtual Memory | |
| |
| |
| |
A Common Framework for Memory Hierarchy | |
| |
| |
| |
Using a Finite-State Machine to Control a Simple Cache | |
| |
| |
| |
Parallelism and Memory Hierarchies: Cache Coherence | |
| |
| |
| |
Parallelism and Memory Hierarchy: Redundant Arrays of Inexpensive Disks | |
| |
| |
| |
Advanced Material: Implementing Cache Controllers | |
| |
| |
| |
Real Stuff: The ARM Cortex-A8 and Intel Core i7 Memory Hierarchies | |
| |
| |
| |
Going Faster: Cache Blocking and Matrix Multiply | |
| |
| |
| |
Fallacies and Pitfalls | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Historical Perspective and Further Reading | |
| |
| |
| |
Exercises | |
| |
| |
| |
Parallel Processors from Client to Cloud | |
| |
| |
| |
Introduction | |
| |
| |
| |
The Difficulty of Creating Parallel Processing Programs | |
| |
| |
| |
SISD.MLMD, SIMD, SPMD, and Vector | |
| |
| |
| |
Hardware Multithreading | |
| |
| |
| |
Multicore and Other Shared Memory Multiprocessors | |
| |
| |
| |
Introduction to Graphics Processing Units | |
| |
| |
| |
Clusters, Warehouse Scale Computers, and Other Message-Passing Multiprocessors | |
| |
| |
| |
Introduction to Multiprocessor Network Topologies | |
| |
| |
| |
Communicating to the Outside World: Cluster Networking | |
| |
| |
| |
Multiprocessor Benchmarks and Performance Models | |
| |
| |
| |
Real Stuff: Benchmarking Intel Core 17 versus NVIDIA Tesla GPU | |
| |
| |
| |
Going Faster: Multiple Processors and Matrix Multiply | |
| |
| |
| |
Fallacies and Pitfalls | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Historical Perspective and Further Reading | |
| |
| |
| |
Exercises | |
| |
| |
Appendices | |
| |
| |
| |
Assemblers, Linkers, and the SPIM Simulator | |
| |
| |
| |
Introduction | |
| |
| |
| |
Assemblers | |
| |
| |
| |
Linkers | |
| |
| |
| |
Loading | |
| |
| |
| |
Memory Usage | |
| |
| |
| |
Procedure Call Convention | |
| |
| |
| |
Exceptions and Interrupts | |
| |
| |
| |
Input and Output | |
| |
| |
| |
SPIM | |
| |
| |
| |
MIPS R2000 Assembly Language | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Exercises | |
| |
| |
| |
The Basics of Logic Design | |
| |
| |
| |
Introduction | |
| |
| |
| |
Gates, Truth Tables, and Logic Equations | |
| |
| |
| |
Combinational Logic | |
| |
| |
| |
Using a Hardware Description Language | |
| |
| |
| |
Constructing a Basic Arithmetic Logic Unit | |
| |
| |
| |
Faster Addition: Carry Lookahead | |
| |
| |
| |
Clocks | |
| |
| |
| |
Memory Elements: Flip-Flops, Latches, and Registers | |
| |
| |
| |
Memory Elements: SRAMs and DRAMs | |
| |
| |
| |
Finite-State Machines | |
| |
| |
| |
Timing Methodologies | |
| |
| |
| |
Field Programmable Devices | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Exercises | |
| |
| |
Index | |
| |
| |
Graphics and Computing GPUs | |
| |
| |
| |
Introduction | |
| |
| |
| |
GPU System Architectures | |
| |
| |
| |
Programming GPUs | |
| |
| |
| |
Multithreaded Multiprocessor Architecture | |
| |
| |
| |
Parallel Memory System | |
| |
| |
| |
Floating Point Arithmetic | |
| |
| |
| |
Real Stuff: The NVIDIA GeForce 8800 | |
| |
| |
| |
Real Stuff: Mapping Applications to GPUs | |
| |
| |
| |
Fallacies and Pitfalls | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Historical Perspective and Further Reading | |
| |
| |
Mapping Control to Hardware | |
| |
| |
| |
Introduction | |
| |
| |
| |
Implementing Combinational Control Units | |
| |
| |
| |
Implementing Finite-State Machine Control | |
| |
| |
| |
Implementing the Next-State Function with a Sequencer | |
| |
| |
| |
Translating a Microprogram to Hardware | |
| |
| |
| |
Concluding Remarks | |
| |
| |
| |
Exercises | |
| |
| |
A Survey of RISC Architectures for Desktop, Server, and Embedded Computers | |
| |
| |
| |
Introduction | |
| |
| |
| |
Addressing Modes and Instruction Formats | |
| |
| |
| |
Instructions: The MIPS Core Subset | |
| |
| |
| |
Instructions: Multimedia Extensions of the Desktop/Server RISCs | |
| |
| |
| |
Instructions: Digital Signal-Processing Extensions of the Embedded RISCs | |
| |
| |
| |
Instructions: Common Extensions to MIPS Core | |
| |
| |
| |
Instructions Unique to MIPS-64 | |
| |
| |
| |
Instructions Unique to Alpha | |
| |
| |
| |
Instructions Unique to SPARC v9 | |
| |
| |
| |
Instructions Unique to PowerPC | |
| |
| |
| |
instructions Unique to PA-RISC 2.0 | |
| |
| |
| |
Instructions Unique to ARM | |
| |
| |
| |
Instructions Unique to Thumb | |
| |
| |
| |
Instructions Unique to SuperH | |
| |
| |
| |
Instructions Unique to M32R | |
| |
| |
| |
Instructions Unique to MIPS-16 | |
| |
| |
| |
Concluding Remarks | |
| |
| |
Glossary | |
| |
| |
Further Reading | |