views:

755

answers:

6

With Intel's launch of a Hexa-Core(6) processor for the desktop, it looks like we can no longer wait for Microsoft to make many-core programming "easy". I just order a copy of Joe Duffy's book Concurrent Programming on Windows. This looks like a great place to start, though, I am hoping some of you who have been targeting multi/many core systems would point me to some good resources that have or would have helped on your projects?


You have given some great answers but, let me add to what I mean by "good resources". Just because we have 6,12, or 48 cores doesn't mean that our applications will benefit from trying to use all of them. I keep hearing that the current programming paradigm is going to shift when we have a plethora of cores in our systems.

What blogs/books should I be reading to best understand the patterns and when to use them. Are there any good podcasts or webcasts that can help.


Here are a few links I have found interesting:

Generally Useful:

Multi-Threading:

+8  A: 

Here are some options

  • F# has really good support for concurrent code
  • Parallel LINQ and Tasks in .NET 4 are useful abstractions.

See the pfxteam blog for additional info on new parallel programming tools in .NET 4.

Brian Rasmussen
It's hard to beat the pfxteam blog. Do you know of any C# 3.0 specific resources?
VoidDweller
I was going to say Joe Albahari and Jon Skeet, but you already list their posts in the question :)
Brian Rasmussen
+6  A: 

There is a series of articles by Reed Copsey that's very thorough and extensive. It starts with basic parallel programming principles and continues with how to implement solutions using the new Task Parallel Library in .NET4.

Ronald Wildenberg
I've started reading the articles, this looks like what we should be thinking about.
VoidDweller
@rwwilden: Thanks for the plug. Just wanted to add that it's still a work in progress - with a lot more coming. Just started on Task parallelism at this point, though the data parallelism is pretty well flushed out.
Reed Copsey
+3  A: 

Keep in mind in the midst of all of this, not every application you write will necessarily benefit from parallel programming. Operating systems are already capable of tossing different processes on different cores which means that your single threaded app will already benefit from the fact that it doesn't have to share it's core with as many other threads and processes.

Spencer Ruport
This is an excellent point Spencer, and a big part of my motivation to ask the question. I've edited my question to reflect this.
VoidDweller
+4  A: 

You may want to check out Patterns of Parallel Programming. Free PDF download.

http://www.microsoft.com/downloads/details.aspx?FamilyID=86b3d32b-ad26-4bb8-a3ae-c1637026c3ee&displaylang=en

bryanjonker
I am going to read this as soon as I have a chance. Looks good, seems to cover the current state of the art plus the soon to be release .Net 4 additions.
VoidDweller
+2  A: 

I agree with Brian and rwwilden on using the Task Parallel Library. While TPL is .NET 4 feature, if you're targeting 3.5 it is available as part of the Reactive Extensions for .NET (Rx).

Peter Tate
Rx looks very compelling, I like that it can be used with 3.5 sp1. I will look into it, I'm wondering if it can bundled with our apps or does it have to be installed.
VoidDweller
It can be bundled with your application, but check the go live license terms.
Richard Hein
@Richard: Thanks for the info.
VoidDweller