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
James Mooney
Instructor
Wenjie Zhang
Wenjie 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

  • 75% Homework 5 Individual Homeworks (15% each)
  • 25% Project Team Project of 3-4 people

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.

Schedule


Date Lectures and Dues Readings
Jan 21 Class Overview  

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.