Course Overview

The goal of this class is to teach parallel computing and developing applications for massively parallel processors (e.g. GPUs). Self­driving cars, machine learning and augmented reality are examples of applications involving parallel computing. The class focuses on computational thinking, forms of parallelism, programming models, mapping computations to parallel hardware, efficient data structures, paradigms for efficient parallel algorithms, and application case studies.

The course will cover popular programming interface for graphics processors (CUDA for NVIDIA processors), internal architecture of graphics processors and how it impacts performance, and implementations of parallel algorithms on graphics processors. The curriculum will be delivered in ~29 lectures. The class has heavy programming components, including five hands­on assignments and a final project.

Prerequisites

Students must have taken both EECS 281 and EECS 370

UG Requirements met by the class:

4 credits, Upper-level elective for CS and CE majors, Flex Tech electives.

Programming Assignments

Five assignments will be assigned during the term.

The most common reason for not doing well on the assignments is not starting them early enough. You will be given plenty of time to complete each assignment. However, if you wait until the last minute to start, you may not be able to finish. Plan to have it finished about 2 days ahead of the due date - many unexpected problems arise during programming, especially in the debugging phase. Plan for these things to happen. Your lack of starting early is not an excuse for turning in your assignment late, even if some unfortunate situations arise such as having your computer crash.

There are many sources of help on which you can draw. Many questions can be submitted to the course staff and your fellow classmates via the class forum. The policies for using the class forum are contained in the first post in the forum. These will typically be answered within the day, often more quickly during working hours. However, some types of questions cannot be answered without seeing your code. If you have detailed questions on your program, speak to a IA or professor in office hours.

Students are also encouraged to help one another on the course concepts (but not the implementation of the assignments). One of the best ways for you to make sure that you understand a concept is to explain it to someone else. Keep in mind, however, that you should not expect anyone else to do any part of your programming assignment for you. The programming assignment that you turn in must be completely your own.

Turning in Assignments

Assignments are due at 11:59 pm exactly on the due date.

Each assignment has a programming component to be submitted on Great Lakes, and a quiz component to be submitted on Gradescope. The programming component is 80% of the assignment grade, and the quiz component is 20% of the assignment grade.

Final Project

There will be a final project with an open ended implementation. You will be responsible for using the knowledge you gained throughout the course to optimize an applied problem. Project details will be posted later in the term.

Assignment and Project Grading

The assignments and project will be graded on both correctness and performance. All grading questions should first be discussed with your IA. If you cannot resolve a problem with the IA, bring the project to the instructor.

Doing Your Own Assignments

All assignments and exams in this course are to be done on your own, with the exception of the final project where you will be allowed to have a partner. Any suspected violation will result in the initiation of formal procedures with the LS&A or Engineering Honor Council. Violators will receive a 0 in the assignment, in addition to additional grade repercussions, as recommended by the appropriate Honor Council.

We will be using a sophisticated automated program to correlate programming work, including those submitted in previous semesters.

We do encourage students to help each other learn the course material. As in most courses, there is a boundary separating these two situations. You may give or receive help on any of the concepts covered in lecture or discussion and on the specifics of CUDA syntax. You are allowed to consult with other students in the current class to help you understand the assignment specification (i.e. the problem definition). However, you may not collaborate in any way when constructing your solution - the solution to the assignment must be generated by your work alone and the work of other students must not have contributed to your solution. You are not allowed to work out the programming details of the problems with anyone or to collaborate to the extent that your programs are identifiably similar. You are not allowed to look at or in any way derive advantage from the existence of specifications or solutions prepared in prior years (e.g. programs written by former students, solutions provided by instructors, or handouts).

If you have any questions as to what constitutes unacceptable collaboration, please talk to the instructor right away. You are expected to exercise reasonable precautions in protecting your own work. Do not leave your program in a publicly accessible directory, and take care when discarding printouts.

Exams

There will be two exams this semester. You are expected to take the exams at the scheduled times. If you do not take an exam without verifying a documented medical or personal emergency causing you to miss an exam, you will receive a zero for that exam. If you anticipate conflicts with the exam time, declare your conflicts by 9/30/2020. The exam dates are given near the beginning of the semester so you can avoid scheduling job interviews or other commitments on exam days. Outside commitments are not considered a valid reason for missing an exam. If you need to request any special accommodation during any exam, please bring the necessary paperwork from the SSD office by the end of the first month of classes.

Grading Policy

Final grades will be based on the total points earned on homeworks, programming assignments and exams. Factors such as class participation may be used to adjust your final grade, especially if it falls on a borderline. The grade distribution is different for the undergraduate and graduate students, i.e., those who have taken EECS 498 and 598, respectively. We consider the following grading policies:

EECS 498 Students:

  • Programming Assignments = 50%
  • Final Project = 15%
  • Midterm = 15%
  • Final exam = 20%

EECS 598 Students:

  • Programming Assignments = 50%
  • Final Project = 20%
  • Midterm = 15%
  • Final exam = 15%

Incompletes will generally not be given. According to university policy, doing poorly in a course is not a valid reason for an incomplete. If you are having problems in the course, your best bet is to come talk to the instructor as soon as you are aware of them.