This course will explore a number of topics in computation using multiple processors. We commonly assume, when solving a problem computationally, that there will be a single processor, and that we must design an algorithm, to be expressed in some appropriate programming language, that will direct that single processor. What happens when there are multiple processors? That is the central question of this course. It is a question that has implications for nearly every branch of CS, and we will attempt to cover some material from each of a number of those branches.
A quick note on what this course is not: It is not about the Internet. We will not be studying web browsers, internet protocols, or any of the many issues of security, privacy, anonymity, etc., that arise from the Internet. While these are interesting topics, our focus will be at a very different level.
Below is a list of the topics that are likely to be covered, roughly in the order presented. The topics are divided into three major categories. It is important to note that we not only may deviate from this list, but that we may significantly deviate from it. This is a new course, and we will be exploring how best to progress with this material, so expect some changes!
Because there are so many topics, it is deeply unlikely that we will cover them all. However, I hope to get to the third segment of the course early enough that we can solve some real problems with real programming languages.
We will meet three times per week for a 50 minutes each. The meetings are at MWF at 10 am, and will be in Seeley Mudd 204.
I will have office hours from 11 am to 12 pm, MWF. I do not mean to imply that those three hours per week are the only times during which I will see you; rather, these are the automatically guaranteed hours during which I will be in my office, and you can stop by to see me without first ascertaining my presence and availability. I am often available at other times, and you need only to email me to set up another time to meet.
There is no single text for this course, as we're going to study a number of topics that no single book covers. There will be handouts and postings to these web pages as needed.
The assignments for this course will differ depending on the section. For the earlier sections, assignments will simply be problem sets. Later, however, we will use a few programming languages and constructs for small programming assignments.
These assignments, although not large, will be important. Working with these ideas is by far the best way to absorb them. Lectures, while important, won't be enough by themselves.
There will be two exams:
The exact time of the mid-term exam will be annouced at least two weeks in advance. You should, however, expect it in the seventh or eighth week of the semester.
Your grade for this course will be calculated based on a forumla that will closely resemble the following one:
You are responsible for the material presented in every lecture. I strongly recommend that you attend every lecture. If you miss a lecture, it is your responsibility to obtain the material that you missed.
A project not submitted by its deadline will receive a failing grade.
If you need an extension, you must submit a written request for that extension at least 72 hours before the deadline. Exceptions will be made on a case by case basis for illness and emergencies.