Last Revised: 2019-08-03

# Lecture 1 (2019-05-07) — Course Introduction

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [course_intro] SENG 475 & ECE 596C
• 00:24: [course_intro] Course Overview [multiple slides]
• 02:11: [course_intro] Prerequisites and Requirements
• 05:33: [course_intro] Course Topics
• 07:07: [course_intro] Learning Outcomes
• 09:42: [course_intro] Course Outline and Various Other Handouts
• 32:02: [course_intro] Video Lectures
• 32:37: [course_intro] Computer-Based Tutorial
• 37:10: [course_intro] Plagiarism and Other Forms of Academic Misconduct
• 41:54: [course_intro] Software Development Environment (SDE)
• 42:57: [course_intro] Prelude to SDE Demonstration
• 45:55: [course_intro] SDE Demonstration

# Lecture 2 (2019-05-08) — Algorithms and Data Structures

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [algorithms] Algorithms [title slide]
• 01:07: [algorithms] Software Performance
• 02:16: [algorithms] Random-Access Machine (RAM) Model
• 04:17: [algorithms] Worst-Case, Average, and Amortized Complexity
• 08:21: [algorithms] Asymptotic Analysis of Algorithms
• 09:55: [algorithms] Big Theta (Θ) Notation
• [algorithms] Big Theta (Θ) Notation (Continued)
• 12:12: [algorithms] Big Oh (O) Notation
• [algorithms] Big Oh (O) Notation (Continued)
• 13:01: [algorithms] Big Omega (Ω) Notation
• [algorithms] Big Omega (Ω) Notation (Continued)
• 15:32: [algorithms] Asymptotic Notation in Equations and Inequalities
• 17:06: [algorithms] Properties of Θ, O, and Ω
• 18:49: [algorithms] Remarks on Asymptotic Complexity
• 22:30: [algorithms] Some Common Complexities
• 23:32: [algorithms] Recurrence Relations
• 25:12: [algorithms] Solving Recurrence Relations
• 26:24: [algorithms] Solutions for Some Common Recurrence Relations
• 27:39: [algorithms] Iterative Fibonacci Algorithm: Time Complexity
• 30:10: [algorithms] Iterative Fibonacci Algorithm: Space Complexity
• 31:04: [algorithms] Recursive Fibonacci Algorithm: Time Complexity
• 32:47: [algorithms] Recursive Fibonacci Algorithm: Space Complexity
• 34:34: [algorithms] Amdahl's Law
• 38:02: [data_structures] Abstract Data Types (ADTs)
• 43:17: [data_structures] Container ADTs (Continued)

# Lecture 3 (2019-05-10) — Data Structures

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [data_structures] Container and Iterator Considerations
• 03:26: [data_structures] Container and Iterator Considerations (Continued)
• 10:43: [data_structures] Array-Based Lists
• [data_structures] Array-Based Lists: Diagram
• 14:38: [data_structures] Remarks on Array-Based Lists
• 29:52: [data_structures] Remarks on Singly-Linked Lists
• 45:55: [data_structures] Remarks on Doubly-Linked Lists [starting from end of preceding slide]

# Lecture 4 (2019-05-14) — Data Structures, Some C++ Review (Const and Other Stuff)

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [data_structures] Doubly-Linked List With Sentinel Node
• [data_structures] Doubly-Linked List With Sentinel Node: Code
• [data_structures] Doubly-Linked List With Sentinel Node: Diagram
• 05:46: [data_structures] Remarks on Doubly-Linked Lists With Sentinel Node
• 08:25: [data_structures] Array Implementation of Stack
• [data_structures] Array Implementation of Stack: Diagram
• 09:13: [data_structures] Remarks on Array Implementation of Stack
• 10:52: [data_structures] Node-Based Implementation of Stack
• [data_structures] Node-Based Implementation of Stack: Diagram
• 11:29: [data_structures] Remarks on Node-Based Implementation of Stack
• 14:43: [data_structures] Array Implementation of Queue
• 16:32: [data_structures] Remarks on Array Implementation of Queue
• 17:40: [data_structures] Array of Arrays Implementation of Queue
• [data_structures] Array of Arrays Implementation of Queue: Diagram
• 22:03: [data_structures] Remarks on Array of Arrays Implementation of Queue
• 22:22: [data_structures] Node-Based Implementation of Queue
• [data_structures] Node-Based Implementation of Queue: Diagram
• 22:51: [data_structures] Remarks on Node-Based Implementation of Queue
• 23:02: [data_structures] Trees
• 24:11: [data_structures] Tree Terminology (Continued 1)
• 24:42: [data_structures] Tree Terminology (Continued 2)
• 25:20: [data_structures] Binary Trees
• 25:58: [data_structures] Perfect and Complete Trees
• 26:24: [data_structures] Balanced Binary Trees
• 27:25: [data_structures] Node-Based Binary Tree
• [data_structures] Node-Based Binary Tree: Diagram
• [data_structures] Remarks on Node-Based Binary Tree
• 29:11: [data_structures] Array-Based Binary Tree
• 29:49: [data_structures] Array-Based Binary Tree: Diagram
• [data_structures] Remarks on Array-Based Binary Tree
• 31:19: [data_structures] Binary Search Trees
• 33:33: [data_structures] Heaps
• 34:34: [data_structures] Set and Multiset ADTs
• 36:20: [data_structures] Map and Multimap ADTs
• [data_structures] Remarks on Implementation of Sets and Maps
• 38:04: [data_structures] Priority Queue ADT
• 41:01: [data_structures] Remarks on Priorty Queue Implementations
• 41:40: [basics] References Versus Pointers
• 45:15: [basics] The const Qualifier
• 45:34: [basics] The const Qualifier and Non-Pointer/Non-Reference Types

# Lecture 5 (2019-05-15) — Some C++ Review (Const and Other Stuff)

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [basics] The const Qualifier and Non-Pointer/Non-Reference Types
• 01:27: [basics] The const Qualifier and Pointer Types
• 05:07: [basics] The const Qualifier and Reference Types
• 09:39: [basics] The constexpr Qualifier for Variables
• 16:08: [basics] The const Qualifier and Functions
• 20:43: [basics] String Length Example: Not Const Correct
• 20:53: [basics] Square Example: Not Const Correct
• [basics] Square Example: Const Correct
• 25:51: [basics] Square Example: Const Correct
• 27:29: [basics] Function Types and the const Qualifier
• 32:30: [exercises] [Q.1] What is Wrong With This Code?
• [exercises] [Q.1] Solution: Use Const Qualifier Correctly

# Lecture 6 (2019-05-17) — Some C++ Review (Const and Other Stuff), Compile-Time Computation

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [exercises] [Q.2] What is Wrong With This Code?
• [exercises] [Q.2] Solution: Use Const Qualifier Correctly
• 08:10: [exercises] [Q.3] What is Wrong With This Code?
• [exercises] [Q.3] Solution: Functions Should Be Inline
• 16:17: [exercises] [Q.4] What is Wrong With This Code?
• [exercises] [Q.4] Solution: Place Inline Function Definitions in Header File
• 19:22: [exercises] [Q.5] What is Wrong With This Code?
• [exercises] [Q.5] Solution 1: Explicit Template Instantiation
• [exercises] [Q.5] Solution 2: Define Function Template in Header File
• 27:07: [exercises] Remarks on Header Files and Function Declarations
• 32:33: [exercises] [Q.6] What is Wrong With This Code?
• [exercises] [Q.6] Solution: Place Default Arguments in Header File
• 41:02: [basics] The constexpr Qualifier for Functions

# Lecture 7 (2019-05-21) — Compile-Time Computation

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:30: [basics] Constexpr Function Example: power_int (Iterative)
• 15:55: [basics] Compile-Time Versus Run-Time Computation
• 21:01: [classes] constexpr Member Functions
• 23:19: [classes] constexpr Constructors
• 24:49: [classes] Example: Constexpr Constructors and Member Functions
• 31:51: [classes] Why Constexpr Member Functions Are Not Implicitly Const
• 37:27: [classes] Literal Types
• 44:26: [classes] Example: Literal Types
• 46:48: [classes] Constexpr Variable Requirements

# Lecture 8 (2019-05-22) — Compile-Time Computation, Temporary Objects

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [classes] Example: Constexpr Variable Requirement Violations
• 02:03: [classes] Constexpr Function Requirements
• 06:22: [classes] Example: Constexpr Function Requirement Violations
• 10:50: [classes] Constexpr Constructor Requirements
• 12:42: [classes] Example: Constexpr Constructor Requirement Violations
• 15:16: [classes] Example: Constexpr and Accessing External State
• 18:15: [classes] Example: Constexpr and Immediate Initialization
• 21:55: [classes] Debugging Constexpr Functions
• 28:50: [classes] Example: Debugging Strategies for Constexpr Functions
• 30:55: [exercises] [Q.7] What is Wrong With This Code?
• [exercises] [Q.7] Solution: Define Constexpr Function in Header
• 33:25: [exercises] [Q.8] What is Wrong With This Code?
• [exercises] [Q.8] Answer: Invalid Constexpr Function
• 36:05: [exercises] [Q.9] What is Wrong With This Code?
• [exercises] [Q.9] Solution: Initialize Constexpr Function Variables
• 40:48: [exercises] [Q.10] What is Wrong With This Code?
• [exercises] [Q.10] Solution: Constexpr Requires Literal Types
• 42:16: [temporaries] Temporary Objects

# Lecture 9 (2019-05-24) — Temporary Objects, Moving/Copying, Value Categories

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [temporaries] Temporary Objects
• 02:51: [temporaries] Temporary Objects (Continued)
• 06:51: [temporaries] Temporary Objects Example
• 07:54: [temporaries] Temporary Objects Example (Continued)
• 09:06: [temporaries] Prefix Versus Postfix Increment/Decrement
• 18:24: [rval_refs] Propagating Values: Copying and Moving
• 22:04: [rval_refs] Copying and Moving
• 23:50: [rval_refs] Buffer Example: Moving Versus Copying
• 25:09: [rval_refs] Buffer Example: Copying
• 27:49: [rval_refs] Buffer Example: Moving
• 30:55: [rval_refs] Moving Versus Copying
• 33:35: [lrvalues] Value Categories of Expressions
• 36:39: [lrvalues] Value Categories of Expressions (Continued)
• 40:36: [lrvalues] Lvalues
• 43:39: [lrvalues] Lvalues (Continued 1)

# Lecture 10 (2019-05-28) — Value Categories, Moving/Copying

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [lrvalues] Lvalues (Continued 2)
• 03:14: [lrvalues] Moving and Lvalues
• 07:17: [lrvalues] Rvalues
• 11:33: [lrvalues] Prvalues
• 14:11: [lrvalues] Prvalues (Continued)
• 19:38: [lrvalues] Xvalues
• 23:55: [lrvalues] Moving and Rvalues
• 34:43: [lrvalues] Moving and Lvalues/Rvalues
• 40:20: [lrvalues] Moving/Copying and Lvalues/Rvalues

# Lecture 11 (2019-05-29) — Copy Elision

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [copy_elision] Copy Elision and Implicit Moving [title slide]
• 00:36: [copy_elision] Copy Elision
• 06:55: [copy_elision] Copy Elision and Returning by Value
• 31:11: [copy_elision] Return-By-Value Example 1: Summary
• 35:32: [copy_elision] Return-By-Value Example 2: Summary
• 38:54: [copy_elision] Example Where Copy Elision Allowed But Likely Impossible
• 44:09: [copy_elision] Copy Elision and Passing by Value

# Lecture 12 (2019-05-31) — Copy Elision, Implicit Move

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [copy_elision] Pass-By-Value Example: Summary
• 04:11: [copy_elision] Copy Elision and Initialization
• 21:27: [copy_elision] Mandatory Copy Elision Example: Factory Function
• 25:02: [copy_elision] Return Statements and Moving/Copying
• 36:36: [copy_elision] Example: Return Statements and Moving/Copying
• 40:38: [copy_elision] Use of std::move in Return Statements
• 43:03: [copy_elision] Example: Moving/Copying, Copy Elision, and Implicit Move a.k.a. [exercises] [Q.MC1] Copy, Move, or Copy Elision?

# Lecture 13 (2019-06-04) — Copy Elision, Implicit Move, Exceptions

The following is a link to the full video:

The following are links to particular offsets within the video:

• 09:44: [rval_refs] Allowing Move Semantics in Other Contexts via std::move
• 10:49: [rval_refs] Old-Style Swap
• 12:20: [rval_refs] Improved Swap
• 14:27: [rval_refs] Implication of Rvalue-Reference Type Function Parameters
• 17:34: [exceptions] Exceptions
• 18:52: [exceptions] The Problem
• 20:35: [exceptions] Traditional Error Handling
• 23:24: [exceptions] Example: Traditional Error Handling
• 25:09: [exceptions] Error Handling With Exceptions
• 27:55: [exceptions] Example: Exceptions
• 29:55: [exceptions] safe_divide Example: Traditional Error Handling
• 30:37: [exceptions] safe_divide Example: Exceptions
• 31:29: [exceptions] Exceptions Versus Traditional Error Handling
• 34:28: [exceptions] Exceptions
• 36:58: [exceptions] Standard Exception Classes
• [exceptions] Standard Exception Classes (Continued 1)
• [exceptions] Standard Exception Classes (Continued 2)
• 37:42: [exceptions] Throwing Exceptions
• 38:39: [exceptions] Throwing Exceptions (Continued)
• 40:45: [exceptions] Catching Exceptions
• 41:41: [exceptions] Catching Exceptions (Continued)
• 43:29: [exceptions] Rethrowing Exceptions
• 44:23: [exceptions] Transfer of Control from Throw Site to Handler
• 50:22: [exceptions] Stack Unwinding Example

# Lecture 14 (2019-06-05) — Exceptions

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [exceptions] Stack Unwinding Example
• 08:38: [exceptions] Function Try Blocks
• 09:49: [exceptions] Exceptions and Construction/Destruction
• 14:06: [exceptions] Construction/Destruction Example
• 18:09: [exceptions] Function Try Block Example
• 24:53: [exceptions] The noexcept Specifier
• 29:13: [exceptions] The noexcept Specifier (Continued 1)
• [exceptions] The noexcept Specifier (Continued 2)
• 30:34: [exceptions] The noexcept Specifier (Continued 3)
• 37:33: [exceptions] Exceptions and Function Calls
• 42:06: [exceptions] Avoiding Exceptions Due to Function Calls

# Lecture 15 (2019-06-07) — Exceptions, Interval Arithmetic

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [exceptions] noexcept Operator
• 08:34: [exceptions] noexcept Operator (Continued)
• 17:00: [arithmetic] Interval Arithmetic
• 21:21: [arithmetic] Applications of Interval Arithmetic
• 24:11: [arithmetic] Real Interval Arithmetic
• 26:22: [arithmetic] Addition and Subtraction
• 27:54: [arithmetic] Multiplication and Division
• 28:46: [arithmetic] Floating-Point Interval Arithmetic
• 31:52: [arithmetic] Floating-Point Interval Arithmetic (Continued)
• 34:12: [arithmetic] Floating-Point Interval Arithmetic Operations
• 35:35: [arithmetic] Comparisons
• 44:18: [arithmetic] Setting and Querying Rounding Mode

# Lecture 16 (2019-06-11) — Interval Arithmetic, Geometric Predicates and Applications

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [arithmetic] Impact of Current Rounding Mode
• 03:55: [arithmetic] Rounding Mode Example
• 04:53: [arithmetic] Geometric Predicates
• 07:18: [arithmetic] Filtered Geometric Predicates
• 11:44: [arithmetic] Two-Dimensional Orientation Test
• 13:50: [arithmetic] Example: Two-Dimensional Orientation Test
• 14:16: [arithmetic] Convex Polygons
• 17:08: [arithmetic] Polygon Convexity Test
• 20:42: [arithmetic] Three-Dimensional Orientation Test
• 25:58: [arithmetic] Side-of-Oriented-Circle Test
• 28:37: [arithmetic] Preferred-Direction Test
• 30:32: [arithmetic] Triangulations
• 33:40: [arithmetic] Delaunay Triangulations
• 35:37: [arithmetic] Nonuniqueness of Delaunay Triangulations
• [arithmetic] Comments on Delaunay Triangulations
• 39:37: [arithmetic] Edge Flips
• 42:21: [arithmetic] Locally-Delaunay Test
• 45:49: [arithmetic] Locally Preferred-Directions Delaunay Test

# Lecture 17 (2019-06-12) — Geometric Predicates and Applications, Memory Management

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [arithmetic] Locally Preferred-Directions Delaunay Test [plus related slides]
• 08:08: [arithmetic] Lawson Local Optimization Procedure
• 11:32: [arithmetic] Finding Delaunay Triangulations with Lawson LOP
• 13:43: [data_structures] Naive Triangle-Mesh Data Structure
• 16:04: [data_structures] Naive Triangle-Mesh Data Structure Example
• 20:11: [data_structures] Half-Edge Data Structure
• 20:46: [data_structures] Half-Edge Data Structure (Continued)
• 30:05: [data_structures] Object File Format (OFF)
• 30:40: [data_structures] OFF Example (Triangle Mesh)
• 34:01: [memory_management] Memory Management
• 36:18: [memory_management] Potential Problems Arising in Memory Management
• 38:42: [memory_management] Alignment
• 39:06: [memory_management] The alignof Operator

# Lecture 18 (2019-06-14) — Memory Management

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:09: [memory_management] The alignas Specifier
• 02:04: [memory_management] New Expressions
• 03:07: [memory_management] New Expressions (Continued)
• 05:49: [memory_management] Delete Expressions
• 07:22: [memory_management] Delete Expressions (Continued 1)
• 10:13: [memory_management] Delete Expressions (Continued 2)
• 11:58: [memory_management] Typical Strategy for Determining Array Size in Array Delete
• 19:21: [memory_management] New Expressions and Allocation
• 22:54: [memory_management] Allocation Function Overload Resolution
• 26:11: [memory_management] Allocation Function Overload Resolution (Continued)
• 29:03: [memory_management] New Expressions and Deallocation
• 30:37: [memory_management] Delete Expressions and Deallocation
• 31:04: [memory_management] Single-Object Operator New (i.e., operator new)
• 34:03: [memory_management] Single-Object Operator New Overloads
• 36:34: [memory_management] Single-Object Operator New Overloads (Continued)
• 37:28: [memory_management] Single-Object Operator New Examples

# Lecture 19 (2019-06-18) — Memory Management

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [memory_management] Array Operator New (i.e., operator new[])
• 01:50: [memory_management] Array Operator New Overloads
• 02:57: [memory_management] Array Operator New Overloads (Continued)
• 03:31: [memory_management] Array Operator New Examples
• 11:54: [memory_management] Single-Object Operator Delete (i.e., operator delete)
• 13:44: [memory_management] Single-Object Operator Delete Overloads
• 14:16: [memory_management] Single-Object Operator Delete Examples
• 20:57: [memory_management] Array Operator Delete (i.e., operator delete[])
• 21:36: [memory_management] Array Operator Delete Overloads
• 21:42: [memory_management] Array Operator Delete Examples
• 22:14: [memory_management] Motivation for Placement New
• [memory_management] Motivation for Placement New: Diagram
• 31:00: [memory_management] Placement New
• 36:59: [memory_management] Placement New Examples
• 43:24: [memory_management] Direct Destructor Invocation
• 46:15: [memory_management] Pseudodestructors

# Lecture 20 (2019-06-19) — Memory Management

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [memory_management] std::addressof Function Template
• 04:25: [memory_management] The std::aligned_storage Class Template
• 05:48: [memory_management] Optional Value Example
• 07:17: [memory_management] Optional Value Example: Diagram
• 08:12: [memory_management] Optional Value Example: optval.hpp
• 19:57: [memory_management] Optional Value Example: User Code
• 22:10: [memory_management] Handling Uninitialized Storage
• 22:55: [memory_management] Functions for Uninitialized Storage
• 26:37: [memory_management] Functions for Uninitialized Storage (Continued)
• 27:47: [memory_management] Some Example Implementations
• 31:04: [memory_management] Bounded Array Example
• 31:19: [memory_management] Bounded Array Example: Diagram
• 32:46: [memory_management] Bounded Array Example: aligned_buffer.hpp
• 34:44: [memory_management] Bounded Array Example: array.hpp (1)
• 39:00: [memory_management] Bounded Array Example: array.hpp (2)
• 44:22: [memory_management] Bounded Array Example: array.hpp (3)
• 48:40: [memory_management] Bounded Array Example: array.hpp (4)

# Lecture 21 (2019-06-21) — Memory Management, Intrusive Containers, Pointers to Members

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [memory_management] Vector Example
• 01:48: [memory_management] Vector Example: Diagram
• 02:43: [memory_management] Vector Example: vec.hpp (1)
• 06:55: [memory_management] Vector Example: vec.hpp (2)
• 12:48: [memory_management] Vector Example: vec.hpp (3)
• 17:01: [memory_management] Vector Example: vec.hpp (4)
• 20:49: [memory_management] Vector Example: vec.hpp (5)
• 24:02: [memory_management] Vector Example: vec.hpp (6)
• 27:38: [data_structures] Intrusive Containers
• 33:25: [data_structures] Shortcomings of Non-Intrusive Containers
• 35:28: [data_structures] Advantages of Intrusive Containers
• 38:27: [data_structures] Disadvantages of Intrusive Containers
• 42:40: [data_structures] Disadvantages of Intrusive Containers (Continued)
• 45:21: [classes] Pointers to Members
• 47:58: [classes] Pointers to Members (Continued)

# Lecture 22 (2019-06-25) — Pointers to Members, Intrusive Containers, Caches

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [classes] Pointers to Members for Data Members
• 06:05: [classes] Pointers to Members Example: Accumulate
• 14:53: [data_structures] Intrusive Doubly-Linked List With Sentinel Node
• [data_structures] Intrusive Doubly-Linked List With Sentinel Node: Code (Continued)
• [data_structures] Intrusive Doubly-Linked List With Sentinel Node: Code
• [data_structures] Intrusive Doubly-Linked List With Sentinel Node: Diagram
• 25:39: [data_structures] Remarks on Intrusive Doubly-Linked List With Sentinel Node
• 25:52: [data_structures] Examples of Intrusive Containers
• 27:03: [cache] The Memory Latency Problem
• 28:32: [cache] Principle of Locality
• 31:05: [cache] Memory Hierarchy
• 32:48: [cache] Caches
• 35:57: [cache] Memory and Cache
• 37:38: [cache] Block Placement
• 40:04: [cache] Block Placement (Continued)
• 42:35: [cache] Direct-Mapped Cache Example
• 43:31: [cache] K-Way Set-Associative Cache Example
• 44:28: [cache] Fully Associative Cache
• 45:03: [cache] Block Identificiation
• 46:43: [cache] Decomposition of Memory Address
• 48:53: [cache] Block Replacement
• 50:26: [cache] Write Policy

# Lecture 23 (2019-06-26) — Caches, Cache-Efficient Algorithms

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [cache] Cache Misses
• 02:14: [cache] Virtual Memory
• 03:20: [cache] Virtual Address Space
• 07:21: [supplemental] [Q.C2] Virtual Memory Exercise
• 08:39: [supplemental] [Q.C2] Virtual Memory Exercise (Continued)
• 14:03: [cache] Translation Lookaside Buffer (TLB)
• 15:59: [cache] Virtual and Physical Caches
• 17:28: [cache] Virtual Versus Physical Caches
• 19:37: [cache] Virtually-Indexed Physically-Tagged (VIPT) Caches
• 20:15: [cache] VIPT Cache Example
• 23:06: [cache] Cache Performance
• 23:50: [cache] Intel Core i7
• 24:42: [cache] ARM Cortex A8
• 25:43: [cache] Cache-Efficient Algorithms
• 26:56: [cache] Code Transformations to Improve Cache Efficiency
• 28:30: [data_structures] Row-Major Versus Column-Major Order
• 29:42: [cache] Array Merging Example
• 31:50: [cache] Loop Interchange Example
• 33:17: [cache] Loop Fusion Example
• 35:25: [cache] Blocking Example
• 37:20: [cache] Blocking Example (Continued 0.5)
• 40:54: [cache] Blocking Example (Continued 1)
• 42:11: [cache] Blocking Example (Continued 2)
• 44:48: [cache] Cache-Aware Versus Cache-Oblivious Algorithms
• 47:24: [cache] Tall Caches

# Lecture 24 (2019-06-28) — Cache-Efficient Algorithms

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [cache] Idealized Cache Model
• 02:20: [cache] Remarks on Assumption of Optimal-Replacement Policy
• 03:45: [cache] Cache-Oblivious Algorithms
• 04:32: [cache] Scanning
• 09:44: [cache] Array Reversal
• 14:48: [cache] Naive Matrix Transposition
• 16:29: [cache] Naive Matrix Transposition: Performance
• 21:31: [cache] Cache-Oblivious Matrix Transposition
• 22:50: [cache] Cache-Oblivious Matrix Transposition (Continued)
• 24:47: [cache] Cache-Oblivious Matrix Transposition Example 1A [Part 1]
• 26:52: [handout] Transpose Algorithm Pseudocode
• 29:38: [handout] Matrix Subblock Characterization
• 30:57: [cache] Cache-Oblivious Matrix Transposition Example 1A [Part 2]
• 32:48: [cache] Cache-Oblivious Matrix Transposition Example 2
• 34:47: [cache] Cache-Oblivious Matrix Transposition: Performance
• 36:40: [cache] Naive Matrix Multiplication
• 39:07: [cache] Naive Matrix Multiplication: Performance

# Lecture 25 (2019-07-03) — Cache-Efficient Algorithms, Concurrency

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [cache] Cache-Oblivious Matrix Multiplication
• 02:16: [cache] Cache-Oblivious Matrix Multiplication (Continued 1)
• 05:55: [cache] Cache-Oblivious Matrix Multiplication (Continued 2)
• 06:44: [cache] Cache-Oblivious Matrix Multiplication Example 1
• 13:02: [cache] Cache-Oblivious Matrix Multiplication: Performance
• 15:14: [cache] Cache-Oblivious Matrix Multiplication Revisited
• 17:52: [cache] Cache-Oblivious Matrix Multiplication Revisited Example 2
• 20:48: [cache] Discrete Fourier Transform (DFT)
• 24:03: [cache] Cache-Oblivious Fast Fourier Transform (FFT)
• 29:41: [cache] Example: Four-Point DFT
• 32:15: [cache] Example: Four-Point DFT (Continued 1)
• 33:41: [cache] Example: Four-Point DFT (Continued 2)
• 34:01: [cache] Cache-Oblivious FFT: Performance
• 37:40: [concurrency] Processors
• 39:38: [concurrency] Processors (Continued)
• 41:29: [concurrency] Why Multicore Processors?
• 44:35: [concurrency] Concurrency

# Lecture 26 (2019-07-05) — Concurrency

The following is a link to the full video:

The following are links to particular offsets within the video:

• 03:51: [concurrency] Memory Model
• 06:47: [concurrency] Sequential Consistency (SC)
• 09:36: [concurrency] Sequential-Consistency (SC) Memory Model
• 20:00: [concurrency] Atomicity of Memory Operations
• 21:46: [concurrency] Data Races
• 28:57: [concurrency] Torn Writes
• 31:11: [concurrency] SC Data-Race Free (SC-DRF) Memory Model
• 34:36: [concurrency] C++ Memory Model
• 39:53: [concurrency] The std::thread Class
• 43:03: [concurrency] The std::thread Class (Continued)

# Lecture 27 (2019-07-09) — Concurrency

The following is a link to the full video:

The following are links to particular offsets within the video:

• 01:49: [concurrency] std::thread Members (Continued)
• 03:06: [concurrency] Example: Hello World With Threads [First Half]
• 05:15: [lambdas] Hello World Program Revisited
• 09:22: [lambdas] Linear-Function Functor Example
• 21:27: [concurrency] Example: Hello World With Threads [Second Hal]
• 23:00: [concurrency] Example: Thread-Function Argument Passing (Copy/Move Semantics)
• 25:23: [concurrency] Example: Thread-Function Argument Passing (Reference Semantics)
• 30:32: [concurrency] Example: Moving Threads
• 33:16: [concurrency] Example: Lifetime Bug
• 36:38: [concurrency] The std::thread Class and Exception Safety
• 38:21: [concurrency] The std::thread Class and Exception Safety (Continued)

# Lecture 28 (2019-07-10) — Concurrency

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [concurrency] Happens-Before Relationships
• 03:12: [concurrency] "Earlier in Time" Versus Happens Before
• 09:02: [concurrency] Sequenced-Before Relationships
• 10:21: [concurrency] Sequenced-Before Relationships (Continued)
• 11:14: [concurrency] Inter-Thread Happens-Before Relationships
• 12:37: [concurrency] Summary of Happens-Before Relationships
• 13:15: [concurrency] Synchronizes-With Relationships
• 17:01: [concurrency] Examples of Synchronizes-With Relationships
• 17:50: [concurrency] Synchronizes-With Relationship: Thread Create and Join
• 23:19: [concurrency] Shared Data
• 24:50: [concurrency] Race Conditions
• 28:42: [concurrency] Critical Sections
• 30:43: [concurrency] Data-Race Example
• 32:33: [concurrency] Example: Data Race (Counter)
• 34:46: [concurrency] Example: Data Race and/or Race Condition (IntSet)

# Lecture 29 (2019-07-12) — Concurrency

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [concurrency] Mutexes
• 03:10: [concurrency] The std::mutex Class
• 05:44: [concurrency] std::mutex Members
• 08:02: [concurrency] Example: Avoiding Data Race Using Mutex (Counter) (mutex)
• 11:00: [concurrency] Synchronizes-With Relationships: Mutex Lock/Unlock
• 18:57: [concurrency] The std::scoped_lock Template Class
• 21:22: [concurrency] std::scoped_lock Members
• 22:14: [concurrency] Example: Avoiding Data Race Using Mutex (Counter) (scoped_lock)
• 24:22: [concurrency] Example: Avoiding Data Race Using Mutex (IntSet) (scoped_lock)
• 32:44: [concurrency] Acquisition of Multiple Locks
• 35:26: [concurrency] Example: Acquiring Two Locks for Swap (Incorrect)
• 38:56: [concurrency] Example: Acquiring Two Locks for Swap [scoped_lock]
• 39:20: [concurrency] The std::unique_lock Template Class
• 41:55: [concurrency] std::unique_lock Members
• 43:28: [concurrency] std::unique_lock Members (Continued)
• 43:55: [concurrency] Example: Avoiding Data Race Using Mutex (Counter) (unique_lock)

# Lecture 30 (2019-07-16) — Concurrency

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [concurrency] The std::lock Template Function
• 01:01: [concurrency] Example: Acquiring Two Locks for Swap [unique_lock and lock]
• 01:51: [concurrency] Static Local Variable Initialization and Thread Safety
• 03:16: [concurrency] Condition Variables
• 07:40: [concurrency] The std::condition_variable Class
• 13:26: [concurrency] std::condition_variable Members
• 14:30: [concurrency] std::condition_variable Members (Continued)
• 15:32: [concurrency] Example: Condition Variable (IntStack)
• 27:50: [concurrency] Latches
• 29:56: [concurrency] Latch Example: User Code
• 32:03: [concurrency] Latch Example: latch_1.hpp
• 37:15: [concurrency] The std::condition_variable_any Class
• 42:07: [concurrency] Simple Thread Pool Interface Example

# Lecture 31 (2019-07-17) — Concurrency, More Exceptions

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [concurrency] Simple Thread Pool Interface Example
• 03:44: [exceptions] Resource Management
• 05:31: [exceptions] Resource Leak Example
• 07:17: [exceptions] Cleanup
• 08:43: [exceptions] Exception Safety and Exception Guarantees
• 13:13: [exceptions] Exception Guarantees
• 20:24: [exceptions] Resource Acquisition Is Initialization (RAII)
• 21:43: [exceptions] Resource Leak Example Revisited
• 30:25: [exceptions] RAII Example: Stream Formatting Flags
• 35:15: [exceptions] Other RAII Examples
• 37:55: [exceptions] Appropriateness of Using Exceptions
• 41:40: [exceptions] Enforcing Invariants: Exceptions Versus Assertions

# Lecture 32 (2019-07-19) — Smart Pointers

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [smart_ptrs] Memory Management, Ownership, and Raw Pointers
• 02:36: [smart_ptrs] Smart Pointers
• 05:15: [smart_ptrs] The std::unique_ptr Template Class
• 08:27: [smart_ptrs] The std::unique_ptr Template Class (Continued)
• 10:37: [handout] Move Operation for unique_ptr
• 13:17: [handout] Why unique_ptr Is Not Copyable
• 16:16: [smart_ptrs] std::unique_ptr Member Functions
• 17:41: [smart_ptrs] std::unique_ptr Member Functions (Continued)
• 18:13: [smart_ptrs] std::unique_ptr Example 1
• 21:48: [smart_ptrs] Temporary Heap-Allocated Objects
• 24:07: [smart_ptrs] Decoupled Has-A Relationship
• 28:19: [smart_ptrs] The std::shared_ptr Template Class
• 31:25: [smart_ptrs] The std::shared_ptr Template Class (Continued)
• 39:09: [smart_ptrs] std::shared_ptr Reference Counting Example
• [smart_ptrs] std::shared_ptr Reference Counting Example (Continued 1)
• [smart_ptrs] std::shared_ptr Reference Counting Example (Continued 2)

# Lecture 33 (2019-07-23) — Smart Pointers, Vectorization

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [smart_ptrs] std::shared_ptr Member Functions
• 00:48: [smart_ptrs] std::shared_ptr Member Functions (Continued)
• 02:23: [smart_ptrs] Prefer Use of std::make_shared
• 04:08: [smart_ptrs] std::shared_ptr Example
• 12:31: [smart_ptrs] std::shared_ptr and const
• 13:46: [smart_ptrs] Factory Function
• 15:17: [smart_ptrs] Example: Shared Pointer to Subobject of Managed Object
• 18:04: [smart_ptrs] Example: Shared Pointer to Subobject of Managed Object (Continued 1)
• 20:51: [smart_ptrs] Example: Shared Pointer to Subobject of Managed Object (Continued 2)
• 24:35: [smart_ptrs] Example: Shared Pointer to Subobject of Managed Object (Continued 3)
• 25:17: [smart_ptrs] Example: Shared Pointer to Subobject of Managed Object (Continued 4)
• 27:36: [smart_ptrs] Example: std::shared_ptr
• 30:00: [smart_ptrs] Example: std::shared_ptr (Continued)
• 32:58: [vectorization] Vector Processing
• 34:33: [vectorization] Scalar Versus Vector Instructions
• 36:10: [vectorization] Vector-Memory and Vector-Register Architectures
• 38:13: [vectorization] Vector-Register Architectures
• 40:56: [vectorization] Vector Extensions
• 42:53: [vectorization] Intel x86/x86-64 Streaming SIMD Extensions (SSE)
• 44:18: [vectorization] Intel x86/x86-64 Advanced Vector Extensions (AVX)
• 46:09: [vectorization] ARM NEON

# Lecture 34 (2019-07-24) — Vectorization

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [vectorization] Checking for Processor Vector Support on Linux
• 01:06: [vectorization] Vectorization
• 03:14: [vectorization] Conceptualizing Loop Vectorization
• 06:56: [vectorization] Approaches to Vectorization
• 14:17: [vectorization] Auto-Vectorization
• 16:34: [vectorization] GCC Compiler and Vectorization
• 17:36: [vectorization] GCC Compiler Options Related to Vectorization
• 18:58: [vectorization] GCC Compiler Options Related to Vectorization (Continued)
• 21:09: [vectorization] Clang Compiler and Vectorization
• 21:39: [vectorization] Clang Compiler Options Related to Vectorization
• 22:58: [vectorization] Assessing Quality of Vectorized Code
• 24:48: [vectorization] Assessing Quality of Vectorized Code (Continued)
• 27:57: [vectorization] Auto-Vectorization with Hints
• 29:43: [vectorization] Obstacles to Vectorization
• 34:04: [vectorization] Data Dependencies and Vectorization
• 35:05: [vectorization] Flow Dependencies
• 37:38: [vectorization] Flow Dependence Example 1
• 40:34: [vectorization] Flow Dependence Example 1: Sequential Loop
• 41:54: [vectorization] Flow Dependence Example 1: Vectorized Loop
• 44:38: [vectorization] Flow Dependence Example 2
• 46:55: [vectorization] Output Dependencies

# Lecture 35 (2019-07-26) — Vectorization

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [vectorization] Control-Flow Dependencies and Vectorization
• 02:07: [vectorization] Aliasing
• 04:15: [vectorization] Aliasing and Optimization: An Example
• 06:18: [vectorization] Aliasing and Vectorization: An Example
• 12:29: [vectorization] The __restrict__ Keyword
• 19:13: [vectorization] Noncontiguous Memory Accesses
• 20:54: [vectorization] Data Alignment
• 24:57: [vectorization] Handling Misaligned Data
• 26:54: [handout] Example: Handling Misaligned Data
• 29:44: [vectorization] Controlling Alignment of Data
• 32:07: [vectorization] Informing Compiler of Data Alignment
• 35:56: [vectorization] Profitability of Vectorization
• 38:00: [vectorization] Vectorization Example: Version 1
• 40:12: [vectorization] Vectorization Example: Version 2
• 41:31: [vectorization] Vectorization Example: Version 3
• 45:33: [vectorization] Vectorization Example: Invoking add Function
• 47:02: [vectorization] Basic Requirements for Vectorizable Loops

# Lecture 36 (2019-07-30) — Vectorization

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [vectorization] OpenMP SIMD Constructs
• 02:09: [vectorization] OpenMP simd Pragma
• 05:28: [vectorization] OpenMP declare simd Pragma
• 07:05: [vectorization] OpenMP SIMD-Related Pragma Clauses
• 08:29: [vectorization] OpenMP SIMD-Related Pragma Clauses (Continued)
• 08:50: [vectorization] Example: Vectorized Loop
• 12:34: [vectorization] Example: Vectorized Loop and Function

# Extra (2019-07-25) — Preliminary Information for Final Exam

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: Final Exam Information

# Lecture 37 (2019-07-31) — Final Course Wrap-Up

The following is a link to the full video:

The following are links to particular offsets within the video:

• 00:00: [wrapup] Any Questions About the Final Exam?
• 14:31: [wrapup] Open Discussion on Ways to Improve Course
• 15:56: [wrapup] Lecture Slides and Videos
• 20:45: [wrapup] Course Experience Survey (CES)

# Extra (2019-06-16) — Meshlab/Geomview Demo

The following is a link to the full video:

The following are links to particular offsets within the video: