English
Summary
Conclusions
Parallelism exists at the levels of bits, instructions, data, threads, processes, and jobs; the more expensive the interaction at a level, the coarser the parallel parts must be. Models make it possible to evaluate an algorithm before programming it: the dependency graph and the work–span model give the speedup limit
Self-check questions
- Name the levels of parallelism. Which of them are implicit for the programmer?
- What is granularity? How is it related to the cost of interaction at each level?
- What are a dependency graph and a critical path? Why does a sequential summation loop have no parallelism?
- How do the EREW, CREW, and CRCW PRAM models differ? Why is PRAM optimistic?
- What are the work, span, and parallelism of an algorithm? State Brent’s theorem.
- What phases does a BSP superstep consist of? How is its cost computed?
- What parameters does the LogP model have, and how does it differ from BSP?
- How does “communication” in shared memory differ from communication in distributed memory?
- What are a grid and a virtual organization? Name Foster’s three criteria of a grid.
- What middleware is used in a grid? What is HTCondor for?
- What are EGI, WLCG, BOINC, and the Ukrainian National Grid?
- How do a cluster, a grid, and a cloud differ? Which problems are suitable for a grid?
- Describe the stages of the PCAM methodology.
- How does static load balancing differ from dynamic balancing? What is work stealing?
- Describe the block, cyclic, and block-cyclic distributions of a vector. When is each one advantageous?
- Why can a parallel sum of floating-point numbers be nondeterministic? How do you make it reproducible?
- Compare the matrix–vector multiplication schemes in terms of computation and communication.
- How do the Fox and Cannon algorithms work? Why are they better than the striped algorithm?
- How do you parallelize the computation of an integral? What is Runge’s rule?
- Why does adaptive integration require dynamic load balancing? Why is a recursion threshold needed?
- How do you find all roots of an equation on an interval in parallel? When can roots be missed?
- Which operations of a conjugate gradient iteration are parallel, and what limits scalability?
- What ways of parallelizing ODE systems are there?
- How do you build a time model of a parallel program? What is the isoefficiency function?
Useful links
- Parallel programming in .NET: https://learn.microsoft.com/dotnet/standard/parallel-programming/
- The
Barrierclass: https://learn.microsoft.com/dotnet/standard/threading/barrier - I. Foster. Designing and Building Parallel Programs: https://www.mcs.anl.gov/~itf/dbpp/
- EGI: https://www.egi.eu/
- WLCG: https://wlcg.web.cern.ch/
- The grid at CERN: https://home.cern/science/computing/grid
- BOINC: https://boinc.berkeley.edu/
- HTCondor: https://htcondor.org/
- NorduGrid ARC: https://www.nordugrid.org/arc/
- Ukrainian National Grid: http://ung.bitp.kiev.ua/ua/
- Debugging multithreaded applications in Rider: https://www.jetbrains.com/help/rider/Debugging_Multithreaded_Applications.html