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.
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.
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.
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.
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...
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.
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.
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.
- 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.
The spring
1999, spring
1998, spring
1997, and spring 1996
lecture notes and resources are still available (mostly).
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