Channels ▼

Christopher Diggins

Dr. Dobb's Bloggers

Distributing Work across Cores using .NET

February 08, 2010

The easiest way in C# using .NET 3.5 to distribute work across cores is to use the ThreadPool static class. I found however, it wasn't quite as effective as it could be so I rolled my own.

One of the goals of Heron  is to make it easy to express parallel operations without having to worry about  threads. I am doing this because I find multi-threaded code too darn hard. The irony is that to implement these operators I had to resort to rolling my own work distribution library using threads. Blech!

I originally was using ThreadPool, but I found that it did not do a great job of distributing work across the cores. So I rolled my own parallelization library in C#. You can find the source code online here: http://stackoverflow.com/questions/2215911/how-can-i-most-effectively-take-advantage-of-multiple-cores-for-short-computation

Interestingly a number of people have recommended to me the Task Parallel Library which is part of .NET 4.0. Effectively it is a more powerful version of my little parallelization library. There are a few reasons that this was not a viable option for me: VS 2010 is still only in Beta and I wanted people to be able to run my code on VS 2008. I'm also a control freak, and I liked the idea of being able to manage work distribution myself.

So far the early benchmarks are showing that Heron does a good job of leveraging the second core of my machine when performing large "map" or "reduce" operations.  I have a lot more tests and benchmarks to do before I feel comfortable making a new release of Heron, but things are looking promising! Maybe we can have a language sometime soon that actually does a good job of leveraging multiple cores.

 

Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.
 


Video