CSCI 5451, Introduction to Parallel Programming
Fall 2025, Mondays and Wednesdays, 8:15am to 9:30am, Lind Hall 302
Course Information
This course is an introduction to parallel computing. It covers parallel architectures, parallel algorithms and their analysis. It will also introduce you to programming on parallel platforms. The main programming medium used for the labs will be in C. OpenMP, MPI, CUDA for NVIDIA Graphics Processing Units (GPUs), and (optionally) NCCL will also be covered. The course begins with a more theoretical focus [the complexity of parallel algorithms and their efficiency], then gradually shifts to a more practical focus on particular algorithms [sorting, graph algorithms, matrix algorithms] and their use in CUDA architectures.
Most course information (lectures, homework descriptions + due dates, code stubs presented during lecture, office hours, etc.) will be posted to the course website. It is your responsibility to track this website and attend lectures to see updates regarding homework assignments and their due dates+requirements. We will use canvas only for homework submission and grading.
- Instructors
-
James Mooney
InstructorWenjie Zhang
Graduate TA - Class meets
- Mondays and Wednesdays, 8:15am to 9:30am, Lind Hall 302
- Office hours
- James: TBD
- Wenjie: Thursday, 5:00pm to 6:00pm, Location TBD
- Class page
- https://jimtmooney.github.io/Courses/F25/index.html
- Canvas
- canvas.umn.edu/courses/518528
Grading, Evaluation & Late Policy
Grading
Evaluation
Your evaluation for this course will be based on 5 homeworks (15% each) and 1 final course project (25%).
Homeworks will be released every ~2 weeks beginning in the second week of September. Each release will consist of a pdf writeup of the assignment along with some small unit tests and a serial version of the program. Each homework submission will contain a zip file of the program itself along with a markdown file describing the solution. Homework submission will be due at 11:59 CST of the due date in Canvas.
Homework grading will consist of two portions. (1) An auto-graded portion determining that (a) the program compiles (b) the program passes a series of unit tests corresponding to the given problem and (c) the program achieves significant speedups over a serial version of the program (what constitutes significant will be stated in the homework pdf). (2) A human graded portion to determine that the program uses the intended frameworks/methods in the homework description (i.e. APIs are not used to make the work easier, specific CUDA libraries/strategies which we want you to use are used, etc.), and to ensure that the writeup aligns with the program itself and displays sufficient knowledge of the methods used.
We will run the autograding portion of the homework grading at 11:59pm on each of the three days before the submission deadline. If you submit your program earlier, this will give you the opportunity to see what your autograded score would be and to debug accordingly.
For the project, you will work in groups of 3-4 in order to parallelize some real world programs. For this, think early about who you would like to work with and start thinking about projects you would like to parallelize. This project should represent a program which is difficult to parallelize or will have high impact when parallelized (i.e. an open source project which has slow, serial parts). I will be discussing this project on a regular basis in lecture regarding updates and will be meeting with each group individually 1-2 times during the semester to ensure that the project is on track.
The grades will be assigned according to the following scale, where T is the total score (out of 100) you have achieved in this course.
A : 100 ≥ T ≥ 94 | A- : 94 > T ≥ 88 | B+ : 88 > T ≥ 82 |
B : 82 > T ≥ 77 | B- : 77 > T ≥ 72 | C+ : 72 > T ≥ 65 |
C : 65 > T ≥ 60 | C- : 60 > T ≥ 55 | D+ : 55 > T ≥ 50 |
D : 50 > T ≥ 40 | F : 40 > T |
Late policy for deliverables
For the homeworks, a late penalty of 2.5% will be incurred for every 3 hours the assignment is past due. This more fractional policy is used as we know many students will likely be submitting their work the night of. This will still incur a penalty but it will be more minor. A full day late will result in a 20% penalty, 2 days 40%, etc. Refer to the below equation for determining the exact percentage deducted from your final grade based on how late your assignment is.
Percentage Deducted = Math.ceil(# hours since due time / 3) * 2.5
Late projects will not be accepted for grades unless under extenuating circumstances made clear in advance.
Homework Assignments
This section contains the homework assignments for this course. If assignments below have no links or descriptions, they have not yet been released.
Here are homework assignments with dues:
- HW1
- HW2
- HW3
- HW4
- HW5
Project Details
Monitor this section in the coming weeks. More details on Project Team Formation and eventual projects will be forthcoming.
Prerequisites
This course assumes that you will be comfortable with C syntax, debugging, and algorithms. This is not an introductory course in programming, but in applications of programming to the parallel setting. We assume that you will be able to incorporate new frameworks and their core ideas quickly. We will not be teaching the basics of C programming before diving into the work. Nor will we be focusing on the exact workings of some of the algorithms.