Browse Source

Parellel: added missing 'wait for threads' to complete code - not sure how the tests passed before. there might be a problem with the tests

Signed-off-by: Marcus Cuda <marcus@cuda.net>
la-knuth
Marcus Cuda 17 years ago
parent
commit
b6562f14da
  1. 4
      src/Numerics/Threading/Parallel.cs
  2. 40
      src/UnitTests/ThreadingTests/ParallelForEachTests.cs

4
src/Numerics/Threading/Parallel.cs

@ -171,8 +171,8 @@ namespace MathNet.Numerics.Threading
});
ThreadQueue.Enqueue(task);
maxBlockSize = Math.Min(Control.MaximumBlockSize, maxBlockSize * scalingFactor);
tasks.Add(task);
maxBlockSize = Math.Min(Control.MaximumBlockSize, maxBlockSize * scalingFactor);
}
WaitForTasksToComplete(tasks.ToArray());

40
src/UnitTests/ThreadingTests/ParallelForEachTests.cs

@ -38,19 +38,19 @@ namespace MathNet.Numerics.UnitTests.ThreadingTests
public class ParallelForEachTests
{
[Test, ApartmentState(ApartmentState.MTA)]
[Column( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 101)]
[Column( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1001)]
public void ParallelForEachInvokesEveryItemOnceMTAOnePerCore(int count)
{
// ensure One-Per-Core
ThreadQueue.Start(Environment.ProcessorCount);
var items = new double[count];
var pairs = new List<KeyValuePair<int, double>>();
for (var i = 0; i < items.Length; i++)
{
items[i] = i;
pairs.Add(new KeyValuePair<int, double>(i, i));
}
// ensure One-Per-Core
ThreadQueue.Start(Environment.ProcessorCount);
Parallel.ForEach(pairs, pair => items[pair.Key] = pair.Value );
Parallel.ForEach(pairs,
pair =>
@ -66,19 +66,19 @@ namespace MathNet.Numerics.UnitTests.ThreadingTests
}
[Test, ApartmentState(ApartmentState.STA)]
[Column(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 101)]
[Column(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1001)]
public void ParallelForEachInvokesEveryItemOnceSTAOnePerCore(int count)
{
// ensure One-Per-Core
ThreadQueue.Start(Environment.ProcessorCount);
var items = new double[count];
var pairs = new List<KeyValuePair<int, double>>();
for (var i = 0; i < items.Length; i++)
{
items[i] = i;
pairs.Add(new KeyValuePair<int, double>(i, i));
}
// ensure One-Per-Core
ThreadQueue.Start(Environment.ProcessorCount);
Parallel.ForEach(pairs, pair => items[pair.Key] = pair.Value);
Parallel.ForEach(pairs,
pair =>
@ -94,19 +94,19 @@ namespace MathNet.Numerics.UnitTests.ThreadingTests
}
[Test, ApartmentState(ApartmentState.MTA)]
[Column(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 101)]
[Column(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1001)]
public void ParallelForEachInvokesEveryItemOnceMTATwoPerCore(int count)
{
// ensure Two-Per-Core
ThreadQueue.Start(2 * Environment.ProcessorCount);
var items = new double[count];
var pairs = new List<KeyValuePair<int, double>>();
for (var i = 0; i < items.Length; i++)
{
items[i] = i;
pairs.Add(new KeyValuePair<int, double>(i, i));
}
// ensure Two-Per-Core
ThreadQueue.Start(2 * Environment.ProcessorCount);
Parallel.ForEach(pairs, pair => items[pair.Key] = pair.Value);
Parallel.ForEach(pairs,
pair =>
@ -122,19 +122,19 @@ namespace MathNet.Numerics.UnitTests.ThreadingTests
}
[Test, ApartmentState(ApartmentState.STA)]
[Column(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 101)]
[Column(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100, 1001)]
public void ParallelForEachInvokesEveryItemOnceSTATwoPerCore(int count)
{
// ensure Two-Per-Core
ThreadQueue.Start(2 * Environment.ProcessorCount);
var items = new double[count];
var pairs = new List<KeyValuePair<int, double>>();
for (var i = 0; i < items.Length; i++)
{
items[i] = i;
pairs.Add(new KeyValuePair<int, double>(i, i));
}
// ensure Two-Per-Core
ThreadQueue.Start(2 * Environment.ProcessorCount);
Parallel.ForEach(pairs, pair => items[pair.Key] = pair.Value);
Parallel.ForEach(pairs,
pair =>

Loading…
Cancel
Save