What This Document Is
This is a programming assignment for CS 220, Introduction to Parallel Computing at the University of San Francisco. The assignment focuses on implementing and parallelizing a well-known algorithm used to solve a fundamental problem in graph theory – finding the shortest paths between all pairs of vertices in a network. It requires students to apply parallel computing concepts to improve the efficiency of a classic algorithm. The core task involves modifying a sequential algorithm for a parallel processing environment.
Why This Document Matters
This assignment is crucial for students learning to translate algorithmic thinking into parallel code. It’s designed for those who are building a foundation in parallel programming and need practical experience with techniques like data decomposition and process allocation. Students tackling this assignment will strengthen their understanding of how to leverage multiple processors to solve complex computational problems. It’s particularly valuable when preparing for more advanced work in high-performance computing or distributed systems. This assignment will be most helpful when you are ready to begin coding and testing a parallel implementation of a graph algorithm.
Common Limitations or Challenges
This assignment focuses specifically on the parallelization of the Floyd-Warshall algorithm using a block partitioning strategy. It does *not* provide a comprehensive introduction to parallel computing concepts; it assumes a basic understanding of these principles. The assignment also doesn’t offer pre-written code solutions or detailed debugging assistance. Students are expected to independently implement the parallel algorithm based on the provided specifications and their existing knowledge. It also doesn’t cover alternative parallelization strategies beyond the specified block partitioning method.
What This Document Provides
* A detailed description of the Floyd-Warshall algorithm and its purpose.
* A clear outline of the parallelization strategy to be employed (block partitioning).
* A specification of how data should be distributed among parallel processes.
* A conceptual framework for understanding how processes will interact during the algorithm’s execution.
* Guidance on the expected structure of the parallelized code.
* References to supporting code files available separately (e.g., a sequential implementation and a matrix generator).