– Class aims to promote professional principles and practice for creating production-quality software solutions.
– Designed to also help students connect concepts learned in a typical four-year university course to real-life code.
– Click on the title of a lesson to view its slides.
– Remember: there are no shortcuts and no royal roads to geometry. This class is meant to be a solid basis to build on.
– Remember: there are no shortcuts and no royal roads to geometry. This class is meant to be a solid basis to build on.
- Introduction
- Objectives
- Quick class overview
- Team project(s)
- Principles
- Types, Variables, and Arithmetic
- Functions
- Scope
- Constants
- Pointers, Arrays, References
- Templates
- STL
- Containers
- Strings
- Time
- Numeric Limits
- Threads
- Origins and Evolution
- Stored-Program Computer
- Von-Neumann Architecture
- Harvard Architecture
- Modified Harvard Architecture
- Non-Uniform Memory Access (NUMA)
- Limits of Physics
- Physical Memory Hierarchy
- Major Latency Figures
- Types of Processing Units
- Simplified CPU Example
- Core 2 Duo Architecture
- Core i7 Architecture
- Intel Tick-Tock Model
- Cache Types
- From Power On to Idle Loop
- Locality of Reference
- Operating Principle
- Memory Access
- Fetch-Decode-Execute Cycle
- Hardware Optimizations
- Costs of Basic Operations
- C++ in Today's World
- Typical C++ Applications
- The Standard and Implementations
- Programs
- Static Analysis
- Dynamic Analysis
Lesson 6.1
Profiling Programs
- Visual Studio Profiler
- Profiling, Bottlenecks and Optimization
- Other Profilers Overview
- Debuggers
Videos (MASIS, Armenian) - Sampling (mispredictions, cache misses) | Instrumentation (cache misses)
This playlist by Intel is also on topic.
- Sign-Magnitude
- One's Complement
- Two’s Complement
- Bits & Hexadecimals
- Multi-byte Data Representation (Endianness)
- Connection with Abstract Algebra
- Compiler Optimizations
- Library Optimizations
- Manual Optimizations
- Theory and Engineering
- Program Memory (Address Space) Layout
- 32-Bit and 64-Bit Platforms
- Logical Memory Hierarchy
- Object Access, Cache Lines, Pages
- Alignment
- Duality of Performance and Security
- Typical Vulnerabilities and Exploits
- Attack Vectors and Protection Mechanisms
- Examples of Real-Life Vulnerabilities
- Quines and Viruses
Lesson 11
- The Most Important C++ Feature
- Resource Management
- RAII
- Exception Safety
- Type Safety
- Thread Safety
- Detailed Analysis
- Coarse-grained Parallelism
- Fine-grained Parallelism
- Embarrassingly Parallel Problems
- Processes, Threads and IPC
- Semaphores
- Deadlocks, Livelocks, and Avoidance Mechanisms
- Mars Pathfinder and Priority Inversion
- Curiosity Rover
- Passing Arguments
- Returning Results
- Sharing Data
- False Sharing
- Waiting for Events
- Communicating Tasks
- Composable Concurrency
- Concept of Modules
- Composability
- Separate Compilation
- Parallel Compilation
- Modularity in Large Programs
- UNIX Philosophy
- Libraries and Frameworks
- Overview of Major C++ Libraries
- Overview of Major C++ Frameworks
- APIs and ABIs
- Importance of English
- Final Thoughts
- The Most Important Key