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.