4,580 Posts served
11,093 Conversations started
- Academic

- Android

- Art, Music, & Animation

- Embedded Computing

- Events

- Game Development

- Graphics & Media

- Intel SW Partner Program

- Intel® AppUp Developer Program

- Manageability & Security

- Mobility

- Open Source

- Parallel Programming

- Performance and Optimization

- Power Efficiency

- Server

- Site News & Announcements

- Software Tools

- Ultrabook

- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Step Two in Changing the World
By Dick Brown (5 posts) on December 21, 2009 at 11:36 am
Intel's recently released experimental 48-core chip is a wakeup call: the multicore future of computing is already arriving now. We've known for years that the number of cores per processor chip is bound to increase exponentially for the foreseeable future. But releasing this 48-core system now means it's now imminent for programmers to know how to wield the weapon of parallelism. That's 48 Pentiums---quite a different story than dozens or even hundreds of threads in a GPGPU or special-purpose processors in a network switch.
Therefore, our undergraduate CS students need to learn parallelism well, in order to acquire the skills they will need to compute effectively during their careers. Intel has led us in the first step, raising the alarm and establishing this Academic Community. CS professors must start taking the second step of responding within courses and curricula, and the sooner, the better.
This calls for teaching parallelism at all levels of the CS curriculum, starting with CS1 (introductory CS), because the need for learning to reason in parallel can no longer be just a subject area, like AI or HCI, but must become a universal skill, like programing or problem solving. Parallel thinking must become an integral part of CS education, like knowing how and when to write a function definition or having the skills to wield data abstraction and encapsulation effectively. Soon after our students are comfortable with "for" loops, we must give them a chance to write parallel "for" loops, together with some criteria for knowing when parallel "for" is appropriate. Among the various properties we point out with a new data structure, we must consider scalability: would you use a given strategy with gigabytes of data? Petabytes? What measures might one need to insure that an algorithm is thread-safe in its access of data? We used to safely hide these parallel computing concerns away in the hardware or in system code, and relegate the teaching of those issues to an upper level course or two, but now everyone needs to become educated in parallelism.
Does this demand "parallelism across the CS curriculum"? That would mean every course, as a universal curricular principle. I'm going to sidestep that one for now, not out of lack of sympathy (we're trying it out at my college), but because I don't want to take the time to debate that issue yet. The first task is to make it feasible---no, convenient---for instructors to bring parallelism into existing courses. An authoritative curricular mandate can surely encourage systemic change, but employment demand for our parallel-aware graduates will be quicker, simpler, and more effective.
What we need is a strategy for conveniently injecting parallelism into existing CS courses at all levels. Relatively few CS professors at colleges and universities consider themselves to be domain experts in parallel computation, so we must begin by making it as easy as possible for college CS instructors from all backgrounds to start teaching parallelism. Obviously, some training opportunities will help, but even before training can begin, there must be materials: ready-to-go teaching and support materials, not just training documents. These include expository readings for students, plentiful labs and exercise sets, guides for class planning, and just as significantly, easy-to-use software and system support that a non-specialist can install, so all students can get hands-on experience with parallel technologies.
In an ideal world, appropriate teaching materials would instantly be integrated with nearly all undergraduate textbooks, and well-established support packages would be readily available for both multicore and distributed computing on all three major computing platforms. In fact, if parallelism doesn't appear in practically all textbooks within 10 years, we may be in trouble. But the situation is urgent: we need something that we can begin rolling out in, say, 2010.
This leads us to independent supplements: teaching modules that can be plugged into a wide variety of existing courses; and parallel platform packages for conveniently installing software systems, so students at all curricular levels can obtain first-hand experience with parallel technologies appropriate for their skill levels. Libby Shoop of Macalester College and I have embarked on a project to produce such modules and platform packages, with support from NSF and our home institutions. We'll begin bringing out draft versions for Community feedback in the Spring. We also hope to connect with other efforts and strategies for injecting parallelism into the CS curriculum.
Modules... Personally, I've never been much of a fan. What could be easier to propose and harder to get widely adopted? I imagine tens of thousands of modules sitting on shelves somewhere, most going technologically out of date or simply being forgotten (maybe not in that order). The courses in our undergraduate curriculum are already packed. How can professors agree to sacrifice truly significant and substantial syllabus items, which are probably comfortable, easy preps, in favor of topics in parallel computing that may be nearly as foreign to instructors as to their students?
The members of this Academic Community know the answer: If you want your CS students to be ready for their careers, you simply must prepare them in parallelism, starting as soon as possible. Plug-and-play modular supplements are the only sufficiently quick strategy for helping professors that don't ordinarily teach parallelism to incorporate it into courses that don't traditionally include it.
The proposed modules are a short-term, temporary bridge for the "scouting team", consisting of CS instructors who respond either to the carrots of encouragements by Intel and others, or the first sticks of technological advances and employer expectations. At first, only a few will perceive the pressing need and try out such modules in their classes. This is fine, as long as we can get their feedback, so we'll be ready when the inevitable big rush of demand comes for teaching materials on parallel computing. That rush should arrive soon, at about the time that CS departments everywhere discover that their graduates are no longer able to get good jobs without a broad education in parallelism.
Categories: Academic, Parallel Programming
Tags: CS Education, Informatics Education, parallel programming
For more complete information about compiler optimizations, see our Optimization Notice.
Comments (2)
| December 22, 2009 11:58 AM PST
Dick Brown
|
Paul Steinberg, Thanks for your comment. At our end of the spectrum, our students with skills in parallelism are finding them quite valuable in job searches as well as graduate school applications. Even in web user-interface positions, where experience with usability is the top draw, students find that having background in parallelism is also a significant plus with recruiters. This suggests that even sectors of the industry that don't yet demand it outright nevertheless value knowledge and experience with parallelism in a job candidate. I wasn't hearing this even a couple of years ago. Soon, everyone in industry will have to demand it explicitly, in order to remain competitive. That's our deadline for getting parallelism into every CS student's background. I'd certainly welcome some specific conversation with industry folks about desirable skills sets as we develop the teaching materials for our project. We will write about concepts of parallelism: what notions are most essential for students to have as we approach the unforeseeable but parallel future? We will develop exercise sets and lab experiences for students: what tools and projects will best represent what they will need, at least for now? It would be great for academics to have an industry wish list to work from as we integrate parallelism into our courses. |
Trackbacks (1)
- Living in a Parallel World « C++ Soup!
January 3, 2010 2:54 AM PST



Paul Steinberg (Intel)
21,061
Thank you for your insightful (and impassioned) blog posting. Among the numerous interesting points you made, I found that the connections made between parallelism within the CS curriculum and career paths for students very apt.
I was at SC09 in Portland recently attending the "Preparing the World for Ubiquitous Parallelism" panel session. On the panel, an engineering manager from Adobe Software stated that it is a rare applicant who passes the phone screen without the credible skills to address parallelism. I have heard similar sentiments from other hiring managers at different industry conferences as well.
Perhaps what is necessary is a cooperation by both Academia and industry to understand how the CS departments are matching the anticipated skill-sets and expectations of the market.