Video Lecture Series: Three Things You Must Teach

By Clay Breshears (Intel) (194 posts) on December 19, 2008 at 8:30 am

Do you play chess?  I do.  I learned when I was about 9 years old.  After 40 years I'm still a patzer, for the most part.  It dawned on me the other night that chess and concurrent programming are metaphorically similar.  You can learn how all the pieces move and learn how to create and manage threads; you can learn some of the tricks and traps inherent in the game and learn about data races and deadlocks; and with practice you will get better at both.

Imagine that you don't know how to play.  You've seen the game played in movies and TV shows or you've seen people playing in the park.  It looks like an interesting activity, but you're clueless about what all the funny looking pieces do or how they work together.  (Is that really a horse's head?)  I wasn't much past this stage when an uncle gave me a copy of "1001 Brilliant Chess Sacrifices and Combinations" by Fred Reinfeld.  The book is 1001 chess diagrams with answers in the back.  A great book, I'm sure, but way over the head of someone that still had trouble remembering exactly how castling works, and probably in the upper stratosphere for anyone that has only seen chess games as background to a television show.

What's this got to do with concurrent programming?  Well, if you're someone who knows nothing or very little about parallelism, you probably find that a lot of the content available here on ISN and other sources is how I felt about Reinfeld's book.  If this is you, rather than a study about the efficacy of readers/writers locks in computational fluid dynamics codes that use finite difference methods on unstructured grids what you need is a primer on concurrent programming to get you started.  This is your lucky day.

I put forth my Three Things You Need to Teach About Parallel Programming as a list of topics that everyone needs to be taught if they are to go on to develop concurrent and parallel programming.  I even put together a set of slides that I figured could be used to teach each of these topics in thirty minutes or less.  The next challenge was to prove that it could be done within that time frame.  Thus, working with Jerry Makare and Paul Steinberg, we filmed me giving the lectures based on my slide sets and have posted these to the Take Five video site.

The three modules (with links to the videos and run time) are

  1. Recognizing Parallelism (part 1, 14:22) (part 2, 10:13)
  2. Shared Memory and Threads (part 1, 12:30) (part 2, 13:33)
  3. Programming with OpenMP (part 1, 15:34) (part 2, 16:26)

Besides personal edification, it was also our intention to have these videos utilized by academics in Computer Science or anyone needing to train students in parallel programming.  These presentations can be used as a template on how these topics could be taught in the classroom or they might be assigned as outside review material for students in order to get them up to speed on some of these concurrent programming basics.

There has been some disagreement on what the three things should be (see comments on my blog post).  There are plenty of different opinions about what threading model should be taught or that teaching threads would do more harm than good.  With the limited budget of three topics and only half an hour to deliver each one, I've had to leave out quite a few things.  More examples and some discussion or homework/programming exercises would be a great addition, but I'm expecting that professors could add these on their own and tailor them to their specific class.

I hope you enjoy and can make some use of these efforts.

Categories: Academic, Parallel Programming

For more complete information about compiler optimizations, see our Optimization Notice.

Comments (2)

December 19, 2008 9:08 AM PST

Paul Steinberg (Intel)
Paul Steinberg (Intel)Total Points:
20,711
Community Manager
Paul Steinberg here.

Let us know if "More examples and some discussion or homework/programming exercises " would be a useful addition. If there is interest, we'll try and provide them.

Also, let us know what your idea for a next topic to teach would be.
August 5, 2011 6:42 AM PDT


Joshua Stough
Thank you for this. I thought the automobile manufacture process was an example of piplining. Is piplining then an example of task-parallelism?

Trackbacks (0)


Leave a comment  

To obtain technical support, please go to Software Support.
Name (required)*

Email (required; will not be displayed on this page)*

Your URL (optional)


Comment*