- Introduction - Computer Abstraction and Technology - Introduction - Traditional Classes of Computing Applications - The PostPC Era - What You Will Learn - Understanding Performance - Eight Great Ideas - From a High-Level Language to the Language of Hardware - Components of a Computer - Memory - The HW and SW interface - Technologies for building processors and memories - Defining performance - Response Time and Throughput - Measuring Performance: response time and CPU execution time - Instruction Performance - Classic CPU Performance Equation - The power wall - Power dissipation in CMOS - Modern problems in power dissipation - The Switch from Uniprocessors to Multiprocessors - SPEC CPU Benchmark - Amdahl’s Law - The C Language - C Program Dissection - Running a C Program - Compilation - Comments - #define - #include - Primitive data type - Global and Local variables - Operators - Function Calls - Control Flow Statements (conditiona statements and loops) - Pointers - Arrays - Characters - Strings - Structures - Typedef - Dynamic memory allocation - Standard Libraries: stdio.h, stdlib.h, math.h, string.h - Static variables - Compiler and command line options - Common mistakes - Visual Studio - Instructions Language of the Computer - Introduction - Operations of the Computer Hardware - Operands of the Computer Hardware - Representing Instructions in the Computer - Logical Operations - Instructions for Making Decisions - Supporting Procedures in Computer Hardware - LEGv8 Addressing for Wide Immediates and Addresses - Parallelism and Instructions: Synchronization - Translating and Starting a Program - A C Sort Example to Put it All Together - Arrays Versus Pointers - Real Stuff: ARMv7 (32-bit) Instructions - Real Stuff: The Rest of the ARMv8 Instruction Set - Fallacies and Pitfalls - Arithmetic in LEGv8 - Integer Multiply and Divide in LEGv8 - Floating Point Standard IEEE Std 754-1985 - Managing Overflows and underflows - Floating-Point Instructions in LEGv8 - Subword Parallellism - ARMv8 SIMD - Fallacies and Pitfalls - The processor - Introduction - A Basic LEGv8 Implementation - An Overview of Implemenetation - Logic Design Convetions - Clocking Methodology - Building the Datapath - A Simple Implementation Scheme - Why a Single-Cycle Implementation is not Used Today - Multi-Cycle Control - An Overview of Pipelining - Pipelined Datapath and Control - Data Hazards: Forwarding versus Stalling - Control Hazards - Exceptions - Parallelism via Instructions - Real Stuff: The ARM Cortex-A53 and Intel Core i7 Pipelines - Going Faster: Instruction-Level Parallelism and Matrix Multiply