Welcome to MSDN Blogs Sign in | Join | Help
Known Correctness Bugs with the Parallel Extensions CTP December 2007

Here are known correctness bugs as of our December 2007 CTP release:

  • Common
    • The setup for Parallel Extensions may fail on Windows Server 2008 (both 32-bit and 64-bit).  As a workaround, Parallel Extensions may be installed manually:
      • From a prompt with administrator privileges: msiexec /a ParallelExtensions_Dec07CTP.msi TARGETDIR="%TMP%\ParallelExtensions" /qn
      • This extracts the contents of the MSI to the target folder. The System.Threading.dll can be GAC'd manually from there using the gacutil tool.
    • The spin waiting used in the libraries doesn't always consider all runnable threads for switching due to dependency on SwitchToThread.
    • AggregateException.Flatten should recursively flatten all AggregateExceptions such that the final output contains no aggregates.
  • PLINQ
    • On an empty sequence, LINQ to Objects' Min/Max will throw an exception whereas PLINQ's will not.
    • Calling Dispose on a PLINQ enumerator does not always properly dispose of resources allocated by the query.
    • LINQ to Objects throws an exception when the predicate delegate passed to First is null; PLINQ does not.
    • Max(double.NaN, null) is returned as null using PLINQ and double.NaN using LINQ to Objects.
    • Calling Reset on an unopened enumerator throws a NullReferenceException.
    • Cast with order-preservation enabled doesn't handle invalid casts.
    • ToArray(int[] lengths) does not handle dimension values of 0 correctly.
    • Union throws IndexOutOfRangeException when order-preservation is enabled
    • SkipWhile, TakeWhile, Select, SelectMany, Where incorrectly handle overflow conditions.
    • TakeWhile followed by Take hangs or throws an out of memory exception when used on an infinite enumerable.
    • Range incorrectly handles Int32.MaxValue.
    • ToArray on a null source throws a NullReferenceException rather than an ArgumentNullException as in LINQ to Objects.
    • No verification is performed on the PLINQ_DOP/PLINQ_PRESERVE_ORDER environment variables before parsing them.
    • Range partitioning fairness needs to be improved.  In certain cases, threads will be starved of work. For example, if input.Count = 9 and DOP = 8, PLINQ will partition input into partitions of sizes {2,2,2,2,1,0,0,0} instead of {2,1,1,1,1,1,1,1}.
    • SelectMany may throw out of memory exceptions for medium-to-large sized data sources.
    • PLINQ is designed to wrap all exceptions thrown from a query in an AggregateException, but sometimes unwrapped exceptions may escape.
  • Task Parallel Library
    • A rare race condition exists that causes some task joins to be missed.
    • The Value property on a Future<T> created with the parameterless Create method is supposed to block in its get accessor until the Value property has been set, but it doesn't.
    • Worker threads are not cleaned up when the associated task manager is disposed.
    • Tasks blocked for significant periods of time may cause runaway thread injection and out of memory conditions when the default policy is used.
    • Task.CancelAndWait is supposed to eat the TaskCanceledException for the task being canceled, but it's currently not doing so.
    • TaskManager(TaskManagerPolicy) should demand Infrastructure permission, not ControlEvidence and ControlPolicy.
    • The implementation of Task.Completed is incorrect and can lead to a completion handler being invoked more than once.
    • TaskCoordinator.WaitAll only works with Task[] (and not TaskCoordinator[] as documented and as exposed through the API).  This means it can't currently be used with parameter arrays.
    • Task.IsCompleted may throw a NullReferenceException when used with self-replicating tasks.
    • TaskManager fails to initialize if execution context flow already suppressed.
    • Parallel.Do will hang if the associated TaskManager has been shutdown.
    • Task.Create(Action, string) conflicts with Task.Create(Action, object), in that a user may try to provide a string as the state to the action, but will end up naming the task instead.
    • ExecutionContext is not flowed correct through some asynchronous points
    • The threadLocalCleanup delegate provided to Parallel.ForEach may not be called. 
  • Samples
    • Most of the samples included with the CTP reference the wrong version number of System.Threading.dll, which will prevent the samples from compiling/executing.  A simple workaround is to remove the System.Threading reference from the sample project and then readd the reference.
Posted: Thursday, November 29, 2007 9:30 AM by toub

Comments

BCL Team Blog said:

The CLR Team has been working with the Parallel Computing Platform Team for the past year on some innovative

# November 30, 2007 2:40 PM

Noticias externas said:

The CLR Team has been working with the Parallel Computing Platform Team for the past year on some innovative

# November 30, 2007 3:17 PM

Witold Bołt said:

> The setup for Parallel Extensions may fail on Windows

> Server 2008 64-bit.

It seems that it may fail also on other systems. I've got Vista SP1 (some test build) 32bit + final versions of VS 2008 and .NET 3.5, but setup still says: .NET 3.5 is required. I've tried reinstalling .NET 3.5 - it didn't help.

Anyway something like:

msiexec /a file.msi /qb

... worked, but for some strange reason InstallDir become Z:\PFiles instead of C:\Program Files - STRANGE!

I guess it would be nice to have just a plain old zip file for CTPs like this one.

# December 1, 2007 6:02 AM

toub said:

Thanks, Witold.  We've heard a few reports of this, and in all cases we've investigated, it's been the result of a previous version of VS2008/.NET 3.5 installed where the uninstall wasn't done cleanly (i.e. some remnants of previous bits still existed on the machine for some reason).  Did you have a previous version installed?

Regardless, I'm sorry for the troubles, and I'm glad you were able to start using the CTP even without the MSI succeeding.  We'll continue to investigate the problem.

# December 1, 2007 4:03 PM

Witold Bołt said:

"Did you have a previous version installed?"

Yes. I've used VS 2008 Beta 2 for a while.

I can also supply you with any logs or do any tests that would be helpfull to solve those problems... Just drop me a mail: ja[at]hope[dot]art[dot]pl

# December 2, 2007 7:05 AM

Parallel Programming with .NET said:

Have you found any bugs, unknown issues (vs. known issues ), or any wish list items? Go to our Connect

# December 4, 2007 12:53 PM

Noticias externas said:

Have you found any bugs, unknown issues (vs. known issues ), or any wish list items? Go to our Connect

# December 4, 2007 1:22 PM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker