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.