This is an exciting time to be learning about parallel computing. In the last decade, parallel processing has become a key component of nearly any computer system you are likely to come in contact with: from the phone in your pocket, to the laptop I'm writing this article on, to the huge data-centers that power Google and Facebook. The pursuit of increasingly high performance machines and the great challenges of writing software that makes efficient use of modern computers are triggering rapid innovation in parallel hardware architectures and parallel computing languages. By taking this course, you are stepping into this fray. However, one drawback of learning about cutting-edge technologies is that there is no perfect textbook to learn from. (Even if there was, it would be out of date in a few years!)
Together as a class, we are going to going to write these missing explanations for ourselves. But this won't be a conventional textbook. Rather than produce a long written text, we're going to produce a tutorial that is a series of short articles that explain the most interesting topics from the course. These articles will be augmented by my lecture slides and comments that we all add to the web site.
Why are we doing this?
- You don't really learn something until you try and explain it. Writing a mini-article is a chance to try and explain a course topic to your friends, classmates, and the world.
- So you have study material. Since there is no textbook that aligns well with this course, the articles you produce are basically the only reference material you have to study for exams. Think about it as one big group study session, where each of you is contributing, and making each other's work better.
- Being able to explain technical concepts simply and clearly is a valuable skill that will serve you well throughout your career, whether that be in the workplace, in graduate studies, and beyond. Just trust me on this. I want you to walk out of this class with a better ability to distill complex systems into very simple descriptions.
Ok, here's how it's going to work
- STEP 1: You need to organize yourselves into teams of four.
- STEP 2: Each lecture, one team will be responsible for writing an article that offers an explanation of key ideas from the lecture. (Some lectures will be split into two articles.) The lecture explanation will be due exactly one week after the lecture.
- STEP 3: The lecture explanation will be posted on-line, and everyone in the class can use the article for studying and review. Everyone can also leave comments on the article to help you make it better. (Like all posts on the 15-418 site, your articles will be written in Markdown. If you're unfamiliar with Markdown, take a look at our 90-Second Guide to 15-418 Markdown.
- STEP 4: Over the course of the semester, the team can continue to revise and improve their article based on their own thoughts, their reaction to comments, or based on conversations with course staff. Your goal should be to have a great explanation of the topic by the end of the semester.
How will it be graded?
Your lecture explanation will be worth 7% of your final course grade. That means that it needs to be good. 1/2 of the grade will come from the article you submit one week after the lecture. The other 1/2 of your grade will come from the quality of the article at the end of the course.
How will the teams work?
For the first week, each person on your team of four will have a well-defined role. Teams are free to choose who will take on each role. Of course, everyone on the team can discuss the material but the writing will be done as follows.
- Person A will produce a detailed outline of the article summarizes the key points it will make.
- Person B will produce the first draft of the article.
- Person C will edit and revise the draft.
- Person D is responsible for coming up with four questions about the topics covered in the article.
The result of this process will be an article posted on the course website within a week of the lecture. Once the article is site on the site, the team can choose to improve it in any way it wishes. This includes receiving feedback and suggestions from other students in the class or the course staff.
Here Are Some Tips
Here are some tips to help you write a great article.
- Think about explaining, and not about taking lecture notes. The number one thing I want to you think about when producing this article is explaining the key ideas of the lecture to your friends. If you and friends were sitting around a table studying for an exam, how would you describe the topic out loud?
- It's about clarity, not comprehensiveness. We are looking for simple, clear explanations. The rule of thumb I encourage students to consider when writing or speaking is: If it's not clear, take it out. A second, related rule is: If someone tells you it's not clear, it's not their fault, it's always your job to find a way to make it clear. You don't have to talk about everything, but everything you do write should be able to be understood completely by everyone in the class. You have all semester to produce your explanation, so it's best to get to most important points clear first, and then add more content later.
- Identify the top three (or four) big ideas. Every lecture has only so many key ideas. Identifying the top three to four ideas in your lecture and understanding how they are related means you are already half way to a great article.
- Good figures are your friend. The right figure can make a difficult concept clear. Consider what the best way to visualize a concept is. You are encourage to integrate figures and illustrations from lecture into your article.
- Constantly solicit feedback. Use your classmates and TAs to get feedback on what about your article has missed, or what might need to be more clear. The better your explanation is, the easier it is for everyone else to learn. We'd all like to help.
- What are the inputs and outputs? Computer scientists think in terms of inputs and outputs. When you have to describe an algorithm or system, often the first thing to describe is what the inputs to the system are, and what the outputs are.
- What are the nouns and the verbs? Systems have things (nouns) and perform actions on things (verbs). At the start of any description it's useful to establish that the main entities in the system are. Then describe the operations that manipulate these entities.
- Major system components (processors, memories, interconnects, etc.)
- State in an algorithm (particles, neighbor lists, work items, pixels, features, etc.);
- Operations performed by the components, or on the entities.
- Describing an application or workload. Some of your articles will focus on the challenge of parallelizing a particular application. When describing an application consider the following:
- What is the problem being solved? (again, what are the inputs and the outputs?)
- Why does the problem stand to benefit from optimization?
- Because real-time performance can be achieved.
- Because researchers could run more experiments, changing how science in a field is done.
- It is 90% of execution time of a larger computation, so this is the critical component to optimize.
- What are the fundamental challenges to parallelization and optimization?
- What is the hardest part of the problem?
- These challenges are probably related to characteristics of the workload (e.g., overcoming execution divergence, increasing arithmetic intensity)