On Wednesday, Microsoft announced the Imagine Cup 2009 worldwide winners: https://www.microsoft.com/presspass/press/2009/jul09/07-07ImagineCup2009WinnersPR.mspxCongratulations to Team Biollel that took first place in the Parallel Computing Award for their “Parallel implementation of maximum likelihood method of phylogenetic tree ...
If you're reading this post, you most likely have an interest in parallel or distributed computing, writing concurrent software, and the like. Take that interest a step further, and help us make the manycore era a successful reality by coming to work on the Parallel Computing Platform team at Microsoft.We currently have several positions...
Parallel Extensions offers a large variety of APIs supporting parallelism. During this blog the discussion will be focused on the methodology for making a choice between two of the new Parallel Extensions concepts: parallelism achieved by using Parallel.Invoke() and parallelism achieved through the use of Tasks. Suppose that ...
One of the ways in which the Task Parallel Library achieves good performance is through “work-stealing”. Work-stealing is supported in the .NET 4 ThreadPool for access through the Task Parallel Library and its default scheduler. This manifests as every thread in the ThreadPool having its own queue for work; when that ...
In many data-parallel scenarios, all of the data to be processed is available immediately. This blog post addresses the opposite scenario: the inputs arrive gradually (as if in a stream), and we want to start producing results even before reading the last element of the input sequence. There is a variety of scenarios in which inputs ...
More and more, developers are realizing the significant scalability advantages that asynchronous programming can provide, especially as it relates to I/O. Consider an application that needs to copy data from one stream to another stream, such as is being done in the following synchronous implementation: static void CopyStreamToStream(Stream ...
In concurrent programs, race conditions are a fact of life but they aren’t all bad. Sometimes, race conditions are benign, as is often the case with lazy initialization. The problem with racing to set a value, however, is that it can result in multiple objects being instantiated when only one is needed. Take the ...
In a previous post, it was demonstrated how for loops with very small loop bodies could be parallelized by creating an iterator over ranges, and then using Parallel.ForEach over those ranges. A similar technique can be used to write parallel loops over iteration spaces of non-integers. For example, let’s say I wanted to ...
One of the great features that crosses all of Parallel Extensions types is a consistent approach to cancellation (see https://blogs.msdn.com/pfxteam/archive/2009/05/22/9635790.aspx). In this post we explore some of the ways cancellation is used in Parallel Extensions and explain the guidance we developed. The new cancellation system is a ...
As has been discussed previously, one of the new features in the Task Parallel Library is TaskCompletionSource<TResult>, which enables the creation of a Task<TResult> that represents any other asynchronous operation. There are a wide variety of sources in the .NET Framework for asynchronous work. One comes from ...