Unit 13 Study Guide
- Explain the definitions and the differences between strong
scaling and weak scaling. Describe scenarios in which one
is preferred over the other.
- Explain Amdahl's Law and its repercussions for concurrent programs.
- Describe the history of concurrent programming, including
special-purpose processors, vector processors, clusters, and GPUs.
- Enumerate the different levels of computing that can benefit from
concurrency.
- Explain the difference between SIMD and MIMD architectures and give
examples of each.
- Define physical and logical concurrency and which
groups of people care about the difference.
- Explain the difference between synchronous and
asynchronous tasks, giving examples of each.
- Explain the common differences between heavyweight and
lightweight tasks and their usual mappings to processes and
threads.
- Describe the job of a scheduler and briefly sketch the life
cycle of a thread.
- Explain and give examples of various problems that arise in concurrent
programs, including deadlock and race conditions. Describe
the classic dining philosopher and producer-consumer
problems.
- Define synchronization, including the difference between
cooperative and competitive synchronization.
- Explain and give examples of synchronization mechanisms, such as
locks, semaphores, monitors, and message
passing.
- Analyze and discuss the implementation of synchronization mechanisms in
popular languages.
- Briefly summarize the rise and fall of High-Performance Fortran, and
discuss its industrial and social legacy.