G22.3033-004 (Fall 2001)
Architecture and Programming of Parallel Computers

Course Description


General Information


Vijay Karamcheti (vijayk@cs.nyu.edu), 
715 Broadway, Room 704; phone: 8-3496


Wednesdays: 5:00pm 7:00pm
102 CIWW

Office Hours:

Tuesdays: 4:00pm 5:00pm
715 Broadway, Room 704

Mailing List:

To subscribe, follow instructions at 
To post to the mailing list, send email to

Web Page:

All course materials, lecture slides, and announcements will be available here. You should plan on visiting this often, as we will rarely hand out printed materials in class.


Senior undergraduate-level or introductory graduate-level courses in computer architecture and operating systems.


Parallel computing is a critical component of current-day computing technology, and is likely to grow in importance with the proliferation of multiprocessor PC desktops and servers (consisting of 8-16 CPUs on a shared bus), and scalable clusters of commodity workstations. 

This course shall examine the organizing principles behind parallel computing both from an architectural and a programming perspective. The course consists of two parts, organized around a common set of issues relevant to all parallel systems: naming, synchronization, latency, and bandwidth. The first part will discuss how modern parallel computer architectures deal with these issues, both at the small (shared memory 
multiprocessors) and large (scalable multiprocessors) scales. The second part of the course will discuss how the issues are dealt with in several common programming paradigms including message-passing, shared-memory, and higher-level approaches. The focus in this part of the course will be on both programming expression and programming for performance. 

The intended audience for this course is doctoral students with research interests in computer architectures, software systems (programming languages, compilers, operating systems), and applications. 


There are no required textbooks.

However, the following two books are recommended:

Course Structure

The course will consist of lectures based on material from the two recommended textbooks supplemented with current research papers. There will be both written and parallel programming assignments (due every two weeks) as well as a significant term project (which can be done in groups of 2-3 students) focusing on writing a non-trivial parallel application program. There will be NO exams.