Professor:
Tia Newhall
Semester: Spring 2012
Time: lecture: 11:20 TR, lab: 1:30-3 W
Location: 264 Sci. Center (lab 240)
Office hours: 1:30-2:30 R, and by appointment
Course Description
This course covers a broad range of topics related to parallel and distributed
computing, including parallel and distributed architectures and
systems, parallel and distributed programming paradigms, parallel
algorithms, and scientific and other applications of parallel and distributed
computing. In lecture/discussion sections, students examine both
classic results as well as recent research in the field. The lab portion
of the course includes programming projects using different programming
paradigms, and students will have the opportunity to examine one course
topic in depth through an open-ended project of their own choosing. Course
topics may include: multi-core, SMP, MMP, client-server,
clusters, clouds, grids, peer-to-peer systems, GPU computing,
scheduling, scalability, resource discovery and allocation,
fault tolerance, security, parallel I/0, sockets, threads, message passing,
MPI, RPC, distributed shared memory, data parallel languages,
MapReduce, parallel debugging, and applications of parallel and distributed
computing.
Class will be run as a combination of lecture and seminar-style discussion.
During the discussion based classes, students will read research
papers prior to the class meeting that we will discuss in class.
During the first part of the course, we will
examine different parallel and distributed programming paradigms.
During the second part of the course, students will propose and carry
out a semester-long research project related to parallel and/or
distributed computing. The department's gigabit cluster, two eight processor
workstations, as well as the CS lab machines, are available for course
projects.
Previous course work in Operating Systems, Networking, Databases, or
Architecture is helpful, but not necessary for taking this course.
Course Goals
- Analyze and critically discuss research papers both in writing and
in class
- Formulate and evaluate a hypothesis by proposing, implementing
and testing a project
- Relate one's project to prior research via a review of related
literature
- Write a coherent, complete paper describing and evaluating a
project
- Orally present a clear and accessible summary of a research work
- Understand the fundamental questions in parallel and distributed
computing and analyze different solutions to these questions
- Understand different parallel and distributed programming
paradigms and algorithms, and gain practice in implementing and
testing solutions using these.
Required Textbook
Principles of Parallel Programming
by Calvin Lin, Larry Snyder
Addison-Wesley, 2009
(ISBN-10: 0321487907, ISBN-13: 9780321487902)
textbook errata
(applicable to just the first printing of the text)
We will also read a number of research papers that will be available
through ACM and IEEE digital library.
Grading
- Class Participation and Paper Summaries: 25%
- Labs: 35%
- Final Project: 40%
Class Schedule
this is a very tentative schedule, it will be updated as we go
WEEK |
DAY |
ANNOUNCEMENTS |
READING |
READING & ASSIGNMENTS |
1 |
Jan 16 |
|
Introduction, Parallel & Distributed Computing |
Chapt. 1, (textbook errata), handout: 1.1,1.2
lab 1 Wednesday lab |
2 |
Jan 23 |
|
Parallel Architectures, Iterprocess Communication, Shared Memory, Threads |
Chapt. 2, handout: 1.3, 1.5 (skim pthreads p.145-179)
lab 2 Wed lab |
3 |
Jan 30 |
|
Distributed Computing, IPC, Socket Programming |
start Chapt. 3, paper for Tues paper for Thurs
lab 3 Wed lab |
4 |
Feb 06 |
|
Parallel Performance, Parallel Languages |
Chapt. 3, start 4, p. 193-199 paper for Thurs
Wed lab |
5 |
Feb 13 |
|
Parallel Languages and Algorithms, CUDA |
Chapt. 4, 10, and p.305-310
lab 4 Wed lab |
6 |
Feb 20 |
|
Parallel Languages, MapReduce, MPI |
Chapt. 7, p. 296-298 paper for Thurs
Wed lab |
7 |
Feb 27 |
|
Parallel Algorithms and Performance |
Chapt. 4
course project information
lab 5: project part 1 Wed lab |
8 |
Mar 05 |
Spring Break |
Mar 12 |
|
Large Scale Distributed Systems |
papers for Tuesday
Wed lab |
9 |
Mar 19 |
Project Proposal due (Mar 22) |
Scalable Parallel Algorithms |
Chapt. 5, p. 305-310 |
10 |
Mar 26 |
|
Distributed Shared Memory, P2P lookup |
week 10 papers |
11 |
Apr 02 |
Project Work Week code and update (Apr 08) |
Project Work Week |
lab 6 project work week
lab7: project part2: midway report and presentation |
12 |
Apr 09 |
Mid-way Project Report due (Apr 12) |
Clusters, Network RAM |
week 12 papers |
13 |
Apr 16 |
|
Security, Clouds, MapReduce |
p. 290-291 week 13 papers
Final project report, presentation, demo |
14 |
Apr 23 |
|
Final Project Presentations |
Presentation Schedule |
|
May 07 |
Final Project Report due before noon Monday May 7 |
Academic Accommodations
If you believe that you need accommodations for a disability, please
contact Leslie Hempling in the Office of Student Disability Services
(Parrish 130, or e-mail
lhempli1 AT swarthmore DOT edu) to set up
an appointment to discuss your needs. Leslie Hempling is responsible
for reviewing and approving disability-related accommodation requests.
As appropriate, she will issue students with documented disabilities an
Accommodation Authorization Letter. Since accommodations require
early planning and are not retroactive, please contact her as soon
as possible. For details about the Student Disabilities Service and
the accomodations process, visit
Student Disability Services.
You are also welcome to contact me privately to discuss your academic needs.
However, all disability-related accommodations must be arranged through
Leslie Hempling in the Office Of Student Disability Services.
Resources
Distributed Systems, Parallel systems, and Cluster links
Reading, Writing, Presentation Advice
Unix and programming resources
-
My CS and Unix Documentation make, tar, cvs, rcs, debugging tools,
editors, programming guides and tutorials, linux and parallel
computing links, ...
-
CS Department's Unix Help Pages
-
CS Project Etiquette Tools and Guidelines for using shared CS
resources to run long-running, intensive applications.
-
Tools for running experiments and collecting performance measurements
condor, screen, nice, profiling tools, script, ...