Schedule

Schedule

Date Topic Speaker Required Reading Optional Reading
Thursday 9/10 Course Introduction Julian Shun Algorithm Engineering - An Attempt at a Definition

A Theoretician’s Guide to the Experimental Analysis of Algorithms

Slides
Algorithm Engineering: Bridging the Gap Between Algorithm Theory and Practice

A Guide to Experimental Algorithmics

Algorithm engineering: an attempt at a definition using sorting as an example

Algorithm Engineering for Parallel Computation

Distributed Algorithm Engineering

Experimental algorithmics

Programming Pearls
Tuesday 9/15 Parallel Algorithms Julian Shun Parallel Algorithms

Thinking in Parallel: Some Basic Data-Parallel Algorithms and Techniques (Chapters 4 and 6)

Slides
CLRS Chapter 26 (Parallel Algorithms)

Prefix Sums and Their Applications

Algorithm Design: Parallel and Sequential

Introduction to Parallel Algorithms

Scheduling Multithreaded Computations by Work Stealing

Thread Scheduling for Multiprogrammed Multiprocessors

Problem Based Benchmark Suite
Thursday 9/17 Parallel Graph Traversal

Quiz
Direction-Optimizing Breadth-First Search

Chapter 7 of Shared-Memory Parallelism Can Be Simple, Fast, and Scalable

Slides Slides
Parallel Cluster-BFS and Applications to Shortest Paths

A Work-Efficient Parallel Breadth-First Search Algorithm (or How to Cope with the Nondeterminism of Reducers)

Internally Deterministic Parallel Algorithms Can Be Fast

SlimSell: A Vectorizable Graph Representation for Breadth-First Search

The More the Merrier: Efficient Multi-Source Graph Traversal

An Evaluation of Parallel Eccentricity Estimation Algorithms on Undirected Real-World Graphs

Theoretically Efficient Parallel Graph Algorithms Can Be Fast and Scalable

Shared Memory Graph Frameworks
Tuesday 9/22 Low-Diameter Decomposition and Connectivity Parallel Graph Decompositions Using Random Shifts

A Simple and Practical Linear-Work Parallel Algorithm for Connectivity

Slides Slides
Improved Parallel Algorithms for Spanners and Hopsets
Thursday 9/24 External-Memory Algorithms

Quiz
The input/output complexity of sorting and related problems

A Functional Approach to External Graph Algorithms

Slides Slides
Algorithms and Data Structures for External Memory

I/O-Complexity of Graph Algorithms

External-Memory Graph Algorithms

Beyond Synchronous: New Techniques for External-Memory Graph Connectivity and Minimum Spanning Forest

Fundamental parallel algorithms for private-cache chip multiprocessors

Parallel External Memory Graph Algorithms

Efficient Parallel and External Matching

External-Memory Computational Geometry

External Memory Geometric Data Structures

A Bulk-Parallel Priority Queue in External Memory with STXXL
Tuesday 9/29 Cache-Oblivious Algorithms Cache-Oblivious Algorithms

Engineering a cache-oblivious sorting algorithm

Slides Slides
Cache-Oblivious Algorithms and Data Structures

Cache Oblivious Distribution Sweeping

Cache-oblivious databases: Limitations and opportunities

An Optimal Cache-Oblivious Priority Queue and Its Application to Graph Algorithms

Cache-Oblivious B-Trees

Cache-oblivious streaming B-trees

An experimental comparison of cache-oblivious and cache-conscious programs
Thursday 10/1 Sorting Algorithms Low Depth Cache-Oblivious Algorithms (except Section 5)

The Case for a Learned Sorting Algorithm

Slides Slides
Super Scalar Sample Sort

Parallel Merge Sort

Optimal and sublogarithmic time randomized parallel sorting algorithms

A comparison of sorting algorithms for the connection machine CM-2

Efficient implementation of sorting on multi-core SIMD CPU architecture

Highly scalable parallel sorting

Designing efficient sorting algorithms for manycore GPUs

TritonSort: A Balanced Large-Scale Sorting System

Sort Benchmark
Tuesday 10/6 Graph Processing Frameworks

Quiz
GraphChi: Large-Scale Graph Computation on Just a PC

Scaling Parallel Algorithms to Massive Datasets using Multi-SSD Machines
Scalability! But at what COST?

External Memory Graph Frameworks

Shared Memory Graph Frameworks

Distributed Memory Graph Frameworks
Thursday 10/8 Pre-proposal Meeting
Tuesday 10/13 No class
Thursday 10/15 Locality in Graph Processing Making Caches Work for Graph Analytics

Rebo: Locality-Aware Graph Processing via Reordering and Blocking
Reducing Pagerank Communication via Propagation Blocking

GraphIt: A High-Performance DSL for Graph Analytics

CoroGraph: Bridging Cache Efficiency and Work Efficiency for Graph Algorithm Execution

Cache-Efficient Fork-Processing Patterns on Large Graphs

Locality Optimizations

Shared Memory Graph Frameworks
Friday 10/16 Project Proposal due today
Tuesday 10/20 Compression

Quiz
An Experimental Analysis of a Compact Graph Representation

Decoding billions of integers per second through vectorization
Compact Representations of Separable Graphs

CompressGraph: Efficient Parallel Graph Analytics with Rule-Based Compression

Chapter 8 of Shared-Memory Parallelism Can Be Simple, Fast, and Scalable

Graph Compression

Graph Partitioning and Reordering
Thursday 10/22 Peeling and Subgraph Finding Algorithms Julienne: A Framework for Parallel Graph Algorithms using Work-efficient Bucketing

Parallel Clique Counting and Peeling Algorithms
Parallel k-Core Decomposition: Theory and Practice
Tuesday 10/27 Parallel Shortest Paths

Quiz
Delta-stepping: a parallelizable shortest path algorithm

Efficient Stepping Algorithms and Implementations for Parallel Shortest Paths
Optimizing Ordered Graph Algorithms with GraphIt

Julienne: A Framework for Parallel Graph Algorithms using Work-efficient Bucketing

Parallel Shortest Paths Using Radius Stepping

An Experimental Study of a Parallel Shortest Path Algorithm for Solving Large-Scale Graph Instances

DSMR: A Parallel Algorithm for Single-Source Shortest Path Problem

Work-Efficient Parallel GPU Methods for Single-Source Shortest Paths

A Randomized Parallel Algorithm for Single-Source Shortest Path

Randomized Speedup of the Bellman-Ford Algorithm

The SprayList: A Scalable Relaxed Priority Queue
Thursday 10/29 Dynamic Graph Algorithms Work-Efficient Parallel Union-Find

Parallel Batch-Dynamic Algorithms for k-Core Decomposition and Related Graph Problems
Dynamic Graph Algorithms

Streaming Graph Frameworks

Parallel Batch-Dynamic Coreness Decomposition with Worst-Case Guarantees
Tuesday 11/3 Streaming Graph Processing

Quiz
Low-Latency Graph Streaming Using Compressed Purely-Functional Trees

PaC-trees: supporting parallel and compressed purely-functional collections
Streaming Graph Frameworks
Thursday 11/5 Integer Sorting Optimal and sublogarithmic time randomized parallel sorting algorithms (Sections 1-3)

Parallel Integer Sort: Theory and Practice
Theoretically-Efficient and Practical Parallel In-Place Radix Sorting

A comprehensive study of main-memory partitioning and its application to large-scale comparison- and radix-sort

Practical Massively Parallel Sorting

Engineering a Multi-core Radix Sort

PARADIS: An Efficient Parallel Algorithm for In-place Radix Sort

A Memory Bandwidth-Efficient Hybrid Radix Sort on GPUs

Sorting Data on Ultra-Large Scale with RADULS

Even Faster Sorting of (Not Only) Integers
Tuesday 11/10 Parallel In-Place Algorithms Theoretically-Efficient and Practical Parallel In-Place Radix Sorting

Parallel In-Place Algorithms: Theory and Practice
Engineering In-place (Shared-memory) Sorting Algorithms
Thursday 11/12 Aggregation and Join

Quiz
Efficient Sorting, Duplicate Removal, Grouping, and Aggregation

A Top-Down Parallel Semisort
Multi-Core, Main-Memory Joins: Sort vs. Hash Revisited

Main-Memory Hash Joins on Modern Processor Architectures

Sort vs. Hash Join Revisited for Near-Memory Execution

Many-query join: efficient shared execution of relational joins on modern hardware

An Experimental Comparison of Thirteen Relational Equi-Joins in Main Memory

High-Performance and Flexible Parallel Algorithms for Semisort and Related Problems
Friday 11/13 Mid-term report due today
Tuesday 11/17 Clustering Theoretically-Efficient and Practical Parallel DBSCAN

Fast Parallel Algorithms for Euclidean Minimum Spanning Tree and Hierarchical Spatial Clustering
Parallel Index-Based Structural Graph Clustering and Its Approximation
Thursday 11/19 Hierarchical Clustering

Quiz
Optimal Parallel Algorithms for Dendrogram Computation and Single-Linkage Clustering

Fully-Dynamic Parallel Algorithms for Single-Linkage Clustering
ParChain: A Framework for Parallel Hierarchical Agglomerative Clustering using Nearest-Neighbor Chain
Tuesday 11/24 Low-Dimensional Nearest Neighbors Parallel Nearest Neighbors in Low Dimensions with Batch Updates

Parallel kd-tree with Batch Updates
Computational Geometry: Algorithms and Applications
Thursday 11/26 No class
Tuesday 12/1 High-Dimensional Nearest Neighbors

Quiz
DiskANN: Fast Accurate Billion-point Nearest Neighbor Search on a Single Node

ParlayANN: Scalable and Deterministic Parallel Graph-Based Approximate Nearest Neighbor Search Algorithms
Worst-case Performance of Popular Approximate Nearest Neighbor Search Implementations: Guarantees and Limitations
Thursday 12/3 Project Presentations
Friday 12/4 Final report due today
Tuesday 12/8 Final Project Meeting
Thursday 12/10 Final Project Meeting