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.