CS267 Resources, Spring 2000

Unless you're already very familiar with parallel programming, CS267 requires a good deal of external information. This directory should lead you to some of it. There are excellent lists of general resources available, so I'm focusing on material necessary for the course. If I've missed anything, or if you know of resources that could help the class, pass them along.


Libraries, Languages, and Utilities

MPI

The Message Passing Interface is the most portable parallel environment around. MPI is primarily for distributed-memory systems, although advanced MPI implementations attempt to be a bit more efficient on shared-memory systems. Each process has its own memory space and makes calls through MPI to tranfer data to and to synchonize with other memory spaces. Ideally, this can mix with threads in interesting ways, but there are very few (if any) thread-safe MPI implementations.

MPI, The Complete Reference
You know that book you considered buying? This is it. If you feel you need a dead-trees version, go ahead.
The MPI Forum
This is the source for MPI information. Your main point of interest here is...
The MPI-1.1 Specification
Since no one supports MPI-2, and not everyone has even fixed 1.1 to the 1.2 level, stick to what this document says.
The MPI FAQ
Of course, everyone will read this before asking questions, right? It doesn't answer much.

Threads

There are essentially four flavors of threads in the wild today: POSIX threads, monopoly threads, wanna-be monopoly threads, and write once, wonder what went wrong threads. There was a fifth flavor, DCE threads, but it has passed into extinction for most people. Absolutely none of these were designed with high-performance computing in mind.

Note that POSIX threads are only portable so long as you avoid signals. And cancellation. Different platorms behave differently, no matter what their marketing departments say. And each platform has its own set of standard library functions that aren't quite thread-safe.

comp.programming.threads
There's a whole newsgroup about threads, and apparently some confusion over the FAQ. The one available here is more up-to-date than the one on rtfm.
Yet another FAQ
This is the official FAQ for comp.programming.threads. It tends to be more general.

And from a more systems-oriented perspective:

POSIX threads for Win32
So much for the monopoly threads.
GNU Portable Threads
The GNU Project's portable threads library does indeed implement threads semi-portably. It does so by not giving access to any parallelism, only to concurrency. This is a cooperative threading package; one thread must give up the processor for another to use it. This is mostly used as a replacement for loops on select or poll in servers, not as a means for achieving high-performance computing. It's an interestign design point, though, and a good one to emphasize that threads aren't just about pure parallelism.
Ousterhout's USENIX spiel against threads
The inventor of quite possibly the worst language ever has some good points against threads. It's worth contrasting these points with those in favor of libraries like pth. Oh, and his language has recently added support for threads...
Notes on threading squid
This discusses positive and negative aspects of threading v. heavy-weight processes v. select loops.

There are a few possibilities open when trying to write really portable software based on threads. The most common is to rely on a library that someone else wrote, like ACE or NSPR. Another approach is to rely primarily on compiler directives, which lead to mass confusion as each compiler writer insisted on spelling for-all differently.

OpenMP

The mass confusion mentioned above has been replaced with mass annoyance. In other words, the spellings have been standardized.

OpenMP ARB
This is the source for the specs and the FAQ, along with plenty of marketting.

UPC

Related to Split-C, UPC tries to make distributed programming a bit easier by hiding message passing under the language. In the case of the T3E, it also makes things much faster.

UPC Tech Report
The technical report (mirrored locally) describes and defines UPC's additions to C (as defined in ISO/IEC 9899:1990).
Programming in C
If you feel like breaking UPC, try poking around the more esoteric areas of C like signal handling. You may think no sane programmer would mix signals and parallel programming, but that's exactly why OpenMP is so obtuse in many ways. They were bound to keep signal semantics right...

Titanium

Ever want to blame your homework on experimental, research software? You may just get the chance with Titanium. We may be using Titanium in some assigments.

SSH

Although the main SSH folks have gone non-free, some free implementations exist. None of the platforms to be used restrict access to SSH2, so these implementations are just fine.

OpenSSH
OpenSSH is a completely free version of SSH. It essentially is an updated version of the old, free SSH from the now-non-free folks.
Top Gun SSH
It's for your Pilot. It's cool. It works.
Java Telnet with SSH support
I haven't used this.
Java SSH client
I haven't used this.
SSH extension for a free (?) terminal program.
I haven't used this. If you're stuck with Windows, try installing a real OS first. Supposedly also works from CE devices, where Linux and BSD support is only beginning.

Hardware Platforms

Millennium

UC Berkeley hosts an interdisciplinary project to provide the campus with a campus-wide ``cluster of clusters,'' the Millennium project. We will be using the Millennium clusters

Getting an account
Students will need EECS Instructional accounts for Millennium access.

If you do not have an EECS Instructional account, follow the instructions (for named accounts, it seems), except note that you'll need to use a client that supports SSH to access cory.eecs.berkeley.edu. Once you have turned in the required, physical form, please tell me.

If you already have an EECS Instructional account, please notify me as soon as possible. Thank you.

The Instructional people will only be giving access to people they can verify are in the class, so be sure you complete the survey before requesting an account. Also, creating the Instructional password entries, transfering the information to the Millennium staff, and creating your accounts may take a few days. I'll use your notification of starting the process to keep things moving.

Setting up your account
Note: You'll need to provide your Unix username when submitting a SSL certificate request.
Changing your password
The Millennium cluster can't handle password changes. Log onto the NoW and change it there. The change will propogate to Millennium within a few hours.
Using MPI
to be written
Using threads
to be written
Using threads with MPI
The likely answer: Don't.
Spelling
Remember: Two ls and two ns.

NoW: now.cs.berkeley.edu

The Millennium accounts also work on the NoW cluster. The NoW's a bit more stable than the Millennium. The official documentation now seems to be hosted on Millennium. The older server sill has some significant documentation, including how to compile with MPI. This includes a sample program, Makefile, etc. Highly recommended.

As seems to be the tradition every year, I've filled in a few documentation gaps and included shell setup information and important caveats. Let me know if you need more.

Cray T3E: mcurie.nersc.gov

NERSC has provided use of their Cray T3E, mcurie.nersc.gov.

A batch tutorial
A quick and easy introduction to the T3E's batch system. An interactive mpprun command will only be able to use the front 17 or so nodes of the T3E (and will pause until you can get the number of nodes you request, it seems). Submitting a job to the batch queue lets you use the back 600+ processors...
Accounting
The class accounts are in the mp309 charging repository. The NERSC instructions detail how to check repo and change repos.
Modules
To pick which software packages are available in your current environment, use the module command. module avail lists the available packages. Some non-parallel, general packages to investigate are GNU (bash, cvs, wget), tcsh, KCC (KAI C++), and python. The MPI and PVM libraries are in mpt.
Message Passing on the T3E
Using MPI or PVM is pretty much automatic with the Cray compilers. You may need to work a bit more with others (like KCC).
General
NERSC lists much of the available software. Contact information is available through NERSC's help page.

General Resources

Designing and Building Parallel Programs
This book, while slightly dated, still provides a good overview.
ParaScope
The IEEE's list of parallel computing resources.
Internet Parallel Computing Archive
A large amount of parallel information. It tends to be slightly less current than ParaScope.
Open Directory: parallel computing
Open Directory: supercomputing
Netlib
This is the primary, on-line archive of mathematical software.
Computer Architecture
Copious, low-level architectural information.

Local Resources

Previous class pages

The spring 1999, spring 1998, spring 1997, and spring 1996 lecture notes and resources are still available (mostly).

Local people, parallel research

If you're hard-pressed for a project idea and aren't inspiried by anything in class, these people have more ideas than industrious grad students. They might be willing to share some of them. A lack of a description does not mean they aren't doing anything interesting, just that I'm not quite sure what to say. Not being included also does not preclude interesting ideas. There's only so much space... See the 2000 ERL Research Summary for much more information.

Alex Aiken
Programming languages, including Titanium.
Dave Culler
One of the primary researchers of both the Millennium and Ninja projects. He co-authored the text used in CS258: Parallel Processors. The lecture notes may be handy. You may want to ask about the Endeavour project, as well.
Jim Demmel
The initial developer of CS267, Dr. Demmel's primary research areas include parallel algorithms for both dense and sparse linear algebra.
Sue Graham
Programming languages, including Titanium.
Paul Hilfinger
Programming languages, including Titanium.
W. Kahan
Numerical software of all sorts. Well, no, all sorts would include inaccurate, sloppy, and slow sorts. Absolutely none of those.
Randy Katz
Talk to him about the Endeavour project. I'm sure there are many interesting, futuristic applications of parallel computing.
Jonathan Shewchuk
Geometric and numerical algorithms.
Kathy Yelick
Programming languages, including Titanium. Also the Intelligent RAM (IRAM) project.

Main CS267 page, and the TA's CS267 page

E. Jason Riedy
ejr@cs.berkeley.edu