Sanjay Rajopadhye
Office: 430 CS Building
Office Hours: see here

Parallel programming is increasingly critical for computer scientists and engineers. All modern machines are parallel, and there is a movement to teach parallel programming in the introductory courses, with sequential programming being viewed as a special case. However, parallel programming is not easy.

This course will teach you the basic concepts of designing, writing, debugging, and analyzing parallel programs. It covers the two main paradigms: shared memory (on CPUs and on GPUs), and message passing. We will also examine a number of parallel algorithms for a range of problems.

This semester, CS475 will be combined with CS575, Parallel Processing. The lecture material will be largely shared, there may be special advanced lectures, covering material that is optional (extra credit) for students in CS475. In addition, each assignment will have such extra credit questions.

Moore's Law is not just about transistor denity, but about delivering this exponentially growin manna of transitors into computing performance to solve the problems of society. This requires efforts all the way up the stack. Until the turn of the century, programmers were relatively isolated from these efforts: systems designers were simply doubling clock frequency, and this doubled performance per square mm. After the turn of the century, this was no longer possible because the heat generated would destroy the chip. So designers started inccreasing parallelism through multiple progcessors (cores) or multiple fine-grain ALUs (vector units). But programming such multicores is difficult,, and it is untenable for programmers to remain ignorant of the multicore architecture, the cache and memory hierarchy, and the vector floating point capabilities of the new machines. This is even more true today, and the skills you learn here will also improve performance of your sequential programs.

CS 475 covers the two main parallel programming paradigms: shared memory (on both CPUs, and GPU-based accelerators), and message passing on dirstibuted memory machines. We will also examine a number of parallel algorithms for a range of problems. On completion of this course you will be able to:

  • Write a number of programs in three C dialects supporting different parallel programing paradigms (OpenMP, CUDA and MPI).
  • Compile the programs using standard desktop and clusters.
  • Run them on CS department Unix platforms
  • Measure the running time as a function of problem size and number of processors.
  • Analyze observations associated with the compiling and running of the programs.
  • Report on your observations and analyses for strong and weak scaling.
The course involves a significant writing component in the form of lab and project reports.

CS 575 covers the same material, but at a greater depth. There may be a few lectures covering advanced material (optional for studnets in CS575) but primarily, you will asked to domore with the material that is presented. Your assignemtns will require additional effort/deliverables, and deeper analysis. Similarly, your projects are expected to be more inventive than those for CS 475. Students in CS 475 may do this for extra credit.


CS 370 (System Architecture and Software), or CS 320 (Algorithms) or instructor consent or


Parallel Programming in C with MPI and OpenMP, Michael J. Quinn (Mc Graw Hill, 2003 ISBN 0-07-282256-2). This textbook is out of print in North America. If you are able to get it from any other source (eBay, Amazon, international, etc.) that is fine, but we have worked out an arrangement with the publisher to make it available to students. This will cost about $50, and can be purchased at the CSU bookstore.


Here are the formally graded elements of the course and associated weighting:

Activity Weight
Programming Assignments 30 %
Tests (Midterm & Final) 40 %
Labs/Discussions/Participation 5 %
Quizzes 10 %
Final Project: term paper 15 %

Semester grades are determined by the weighted sum of points earned in each of these areas. Tests will be done individually and grades assigned on an individual basis. The assignment of letter grades will be made as follows (we reserve the right to lower any of the cutoff points):

 Grade   Score 
A+ ≥ 95%
A ≥ 90%
A- ≥ 87%
B+ ≥ 83%
B ≥ 80%
B- ≥ 77%
C+ ≥ 73%
C ≥ 70%
D ≥ 60%
F < 60%

Late and Makeup Policy

Midterm and Final: Make-up exams are only given for extraordinary circumstances (e.g., illness, family emergency). Students must consult with the instructor as soon as possible, before the scheduled start of the exam. Course examination dates are listed in the syllabus; be aware of them and plan accordingly.

Programming Assignments: Programming assignments will be submitted using the Checkin tab on this website. Specifics will be included in each assignment. Always check the assignment page for due dates. Late assignments will not be accepted; students not having submitted programs/reports receive an automatic zero on the assignment.


The project entails two options.
  • Empirical study of parallelization of a larger application than the assignment problems.
  • Identification and study of an open research problem.
Either option will also invlove writing a two-to-four page paper.

Important Dates

MidtermWednesday of Week 7th, in the evening
Final Exam TBD

Midterms and the final exam will be held online. Exams will be taken as Canvas quizzes and will be proctored.

While no change to the midterm dates is anticipated, the instructor reserves the right to change these dates with a one week notice.

In Class Participation

All students taking this course are expected to participate actively. For all students, this includes asking and responding to questions. There will also be canvas quizzes.

Professional Conduct

All students are expected to conduct themselves professionally. We (the instructors and GTAs) assume you are familiar with the policies in the student information sheet for the department. Additionally, you are computing professionals, albeit perhaps just starting. You should be familiar with the code of conduct for the primary professional society, ACM. You can read the ACM Code of Conduct HERE.

We work to maintain an environment supportive of learning in the classroom and laboratory. Towards that end, we require that you be courteous to and respectful of your fellow participants (i.e., classmates, instructors, GTAs and any tutors). In particular:

  • Please turn off the ring on your cell phone. If you are expecting an emergency call, sit near the door and slide out discretely to take it.
  • In class use of electronic devices in general, and laptops specifically, is permitted as a courtesy so that you may better participate and learn. If at any time the instructor judges that an electronic device is becoming a distraction the student may be asked to to turn it off and put it away.
  • All exams and quizzes are to be done without the aid of any unauthorized aid. Phones, and all other electronic devices must be shut and put away during exams and quizzes.