What This Document Is
This is a programming assignment for CS 625: Parallel and Distributed Computing at the University of San Francisco. The assignment focuses on applying parallel computing techniques, specifically utilizing CUDA, to solve a classic computer science problem – the Longest Common Subsequence (LCS) problem. It requires students to develop a C program that efficiently finds the longest subsequence common to two given sequences of positive integers. The assignment emphasizes the practical implementation of parallel algorithms and performance optimization.
Why This Document Matters
This assignment is crucial for students enrolled in a parallel and distributed computing course. It provides hands-on experience in translating theoretical concepts into a working CUDA program. Successfully completing this assignment will demonstrate an understanding of parallel programming models, GPU architecture, and algorithm design for parallel execution. It’s particularly valuable for students preparing for roles involving high-performance computing, data science, or any field requiring efficient processing of large datasets. This assignment will be most helpful when you are ready to put your CUDA knowledge into practice and tackle a non-trivial algorithmic challenge.
Common Limitations or Challenges
This document outlines the problem statement, required functionalities, and evaluation criteria for the assignment. However, it does *not* provide a complete, ready-to-run solution. Students are expected to independently design, implement, and debug their CUDA program. The document also doesn’t offer detailed guidance on specific CUDA syntax or debugging techniques; those are assumed to be covered in course lectures and other materials. It focuses on the algorithmic problem and parallelization strategy, not step-by-step coding instructions.
What This Document Provides
* A clear definition of the Longest Common Subsequence problem.
* Specific instructions regarding program input and expected output formats.
* Command-line argument specifications for controlling thread block and thread configurations.
* An optional flag to suppress output for performance testing.
* Background information and terminology related to sequences and subsequences.
* A description of the dynamic programming approach to solving the LCS problem serially, providing a foundation for parallelization.
* Guidance on the core logic behind the LCS algorithm using the L array.