*********************
Midterm Topic Outline
*********************
Because midterm is a take-home quiz, nothing to prepare really. You can use
this document as a guide to the reviewing of the book content. You may also use
use this outline as a quick reference to find where to locate the book sections
when working with on the midterm.


Types of Questions
==================
+ Terminology - Show your knowledge of common terminology
  Example: network topologies, SIMD, etc.

+ Understanding and application
  Example: Computing performance metrics

+ Design
  Example: design a cache aware algorithm

+ Parallel software
  * Compiling with OpenMP
  * Write a complete OpenMP program
  * Running parallel program

Performance Model
=================
Calculations of key performance metrics. Know some terms.

+ Communication cost model
+ Parallel time complexity
+ Speedup
+ Efficiency
+ Strong scaling vs Weak scaling
+ Amdahl’s law

Parallel Hardware
=================
+ SISD, SIMD, and MIMD
+ Interconnection networks: ring, toroidal mesh, hypercube, fat tree
+ Shared memory vs distributed memory vs distributed shared memory
+ Non-uniform memory access
+ Cache coherence and false sharing
+ Race conditions

Parallel Algorithms
===================
+ Integration – trapezoid example
+ Matrix operations
  * Matrix multiplication
  * Matrix addition
  * Matrix-vector multiplication

+ Broadcast

Optimizing for Cache
====================
+ Ideal cache model and cache complexity
+ Improving cache complexity through loop reordering
+ Row major vs column major ordering

Single Core Optimization
========================
+ Using -O3 as an optimization flag
+ Using memcpy and memset

OpenMP Programming
==================
+ Directives: parallel, for, critical
+ Clauses: private, reduction, schedule
+ Library functions: omp_get_max_threads, omp_get_thread_num,
  omp_get_num_procs, omp_set_num_threads
+ Header file: omp.h
+ Compilation command: ``-fopenomp``
+ Running parallel code