Current Catalog Description

Parallel computer architectures, parallel languages, parallelizing compilers and operating systems. Design, implementation, and analysis of parallel algorithms for scientific and data-intensive computing. Credit is not given for both CSE 375 and CSE 475.  Prerequisites: (ECE 201 or CSE 201) or CSE 303 or 202 previously or concurrently, or consent of the instructor.

Instructor: Roberto Palmieri (Fall 2021)


  •  Michael McCool, James Reinders, Arch Robison, "Structured Parallel Programming: Patterns for Efficient Computation", Morgan Kaufmann, 1st Edition, 2012, ISBN: 9780124159938
  •  Maurice Herlihy and Nir Shavit, "The Art of Multiprocessor Programming", Revised Print, Morgan Kaufmann, 1st Edition, 2012, ISBN 978-0123973375
  •  Scientific articles provided by the Instructor



Students will have:

  • Understanding of parallel hardware constructs, to include instruction-level parallelism, supercomputer architecture, multicore processor design
  • Understanding of language design issues related to parallel programming
  • Understanding of correctness criteria for parallel and concurrent computing
  • Ability to identify and classify dependencies
  • Ability to identify and correct data races
  • Ability to write performant parallel programs


CSE 375 substantially supports the following Student Enabled Characteristics:

A. An ability to apply knowledge of computing and mathematics appropriate to the discipline

J. An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a away that demonstrates comprehension of the tradeoffs involved in design choices


Prerequisites by Topic

  1. Knowledge of operating system resource allocation
  2. Knowledge of an assembly language
  3. Knowledge of microprocessor design
  4. Knowledge of memory hierarchy design
  5. Fluency in a programming language

Major Topics Covered in the Course

  1. Dependency Analysis
  2. Parallel Programming Patterns
  3. Multicore Architectures
  4. Cache Coherence and Memory Consistency
  5. Correctness Models for Concurrent and Parallel Programs
  6. Principles of Distributed Computing
  7. Locking and Nonblocking Synchronization
  8. Hardware and Software Speculation/Transactional Memory

Assessment Plan for the Course

The students are given two short programming assignments, and a semester-long programming assignment. Each programming assignment includes a written portion, describing results achieved, obstacles encountered, and analysis required to achieve results. Semester-ling programming project also includes an in-class presentation.

How Data in the Course are Used to Assess Program Outcomes:(unless adequately covered already in the assessment discussion under Criterion 4)

Objectives 1,4, and 5 are measured directly through the first two programming assignments. Objectives 1,2,3 and 6 are measured in the semester project. During my self-assessment for the course, I evaluate the degree to which each objective was met by the best, worst, and average student.