Browse Source

Control: rename NumberOfParallelWorkerThreads to MaxDegreeOfParallelism #197

provider
Christoph Ruegg 13 years ago
parent
commit
b4da1d0948
  1. 4
      src/Numerics/Compatibility.cs
  2. 12
      src/Numerics/Control.cs
  3. 2
      src/Numerics/LinearAlgebra/Complex/Factorization/UserCholesky.cs
  4. 8
      src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs
  5. 2
      src/Numerics/LinearAlgebra/Complex32/Factorization/UserCholesky.cs
  6. 8
      src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs
  7. 2
      src/Numerics/LinearAlgebra/Double/Factorization/UserCholesky.cs
  8. 8
      src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs
  9. 2
      src/Numerics/LinearAlgebra/Single/Factorization/UserCholesky.cs
  10. 8
      src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs
  11. 10
      src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex.cs
  12. 10
      src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex32.cs
  13. 10
      src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Double.cs
  14. 10
      src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Single.cs
  15. 6
      src/Numerics/Random/Palf.cs
  16. 12
      src/Numerics/Threading/CommonParallel.cs

4
src/Numerics/Compatibility.cs

@ -21,7 +21,7 @@ namespace MathNet.Numerics
{ {
public static IEnumerable<Tuple<int, int>> Create(int fromInclusive, int toExclusive) public static IEnumerable<Tuple<int, int>> Create(int fromInclusive, int toExclusive)
{ {
var rangeSize = Math.Max(1, (toExclusive - fromInclusive) / Control.NumberOfParallelWorkerThreads); var rangeSize = Math.Max(1, (toExclusive - fromInclusive) / Control.MaxDegreeOfParallelism);
return Create(fromInclusive, toExclusive, rangeSize); return Create(fromInclusive, toExclusive, rangeSize);
} }
@ -260,7 +260,7 @@ namespace MathNet.Numerics
{ {
public static OrderablePartitioner<Tuple<int, int>> Create(int fromInclusive, int toExclusive) public static OrderablePartitioner<Tuple<int, int>> Create(int fromInclusive, int toExclusive)
{ {
var rangeSize = Math.Max(1, (toExclusive - fromInclusive) / Control.NumberOfParallelWorkerThreads); var rangeSize = Math.Max(1, (toExclusive - fromInclusive) / Control.MaxDegreeOfParallelism);
return Create(fromInclusive, toExclusive, rangeSize); return Create(fromInclusive, toExclusive, rangeSize);
} }

12
src/Numerics/Control.cs

@ -39,7 +39,7 @@ namespace MathNet.Numerics
/// </summary> /// </summary>
public static class Control public static class Control
{ {
static int _numberOfThreads; static int _maxDegreeOfParallelism;
static int _blockSize; static int _blockSize;
static int _parallelizeOrder; static int _parallelizeOrder;
static int _parallelizeElements; static int _parallelizeElements;
@ -61,7 +61,7 @@ namespace MathNet.Numerics
MaxToStringRows = 8; MaxToStringRows = 8;
// Parallelization & Threading // Parallelization & Threading
_numberOfThreads = Environment.ProcessorCount; _maxDegreeOfParallelism = Environment.ProcessorCount;
_blockSize = 512; _blockSize = 512;
_parallelizeOrder = 64; _parallelizeOrder = 64;
_parallelizeElements = 300; _parallelizeElements = 300;
@ -93,7 +93,7 @@ namespace MathNet.Numerics
public static void UseSingleThread() public static void UseSingleThread()
{ {
_numberOfThreads = 1; _maxDegreeOfParallelism = 1;
ThreadSafeRandomNumberGenerators = false; ThreadSafeRandomNumberGenerators = false;
} }
@ -146,10 +146,10 @@ namespace MathNet.Numerics
/// when parallelization is applicable. /// when parallelization is applicable.
/// </summary> /// </summary>
/// <remarks>Default to the number of processor cores, must be between 1 and 1024 (inclusive).</remarks> /// <remarks>Default to the number of processor cores, must be between 1 and 1024 (inclusive).</remarks>
public static int NumberOfParallelWorkerThreads public static int MaxDegreeOfParallelism
{ {
get { return _numberOfThreads; } get { return _maxDegreeOfParallelism; }
set { _numberOfThreads = Math.Max(1, Math.Min(1024, value)); } set { _maxDegreeOfParallelism = Math.Max(1, Math.Min(1024, value)); }
} }
/// <summary> /// <summary>

2
src/Numerics/LinearAlgebra/Complex/Factorization/UserCholesky.cs

@ -92,7 +92,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {

8
src/Numerics/LinearAlgebra/Complex/Factorization/UserQR.cs

@ -87,12 +87,12 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(r, i, i); u[i] = GenerateColumn(r, i, i);
ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.MaxDegreeOfParallelism);
} }
} }
else else
@ -102,7 +102,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(q, i, i); u[i] = GenerateColumn(q, i, i);
ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount); r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount);
@ -115,7 +115,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex.Factorization
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
} }

2
src/Numerics/LinearAlgebra/Complex32/Factorization/UserCholesky.cs

@ -87,7 +87,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {

8
src/Numerics/LinearAlgebra/Complex32/Factorization/UserQR.cs

@ -82,12 +82,12 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(r, i, i); u[i] = GenerateColumn(r, i, i);
ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.MaxDegreeOfParallelism);
} }
} }
else else
@ -97,7 +97,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(q, i, i); u[i] = GenerateColumn(q, i, i);
ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount); r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount);
@ -110,7 +110,7 @@ namespace MathNet.Numerics.LinearAlgebra.Complex32.Factorization
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
} }

2
src/Numerics/LinearAlgebra/Double/Factorization/UserCholesky.cs

@ -85,7 +85,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {

8
src/Numerics/LinearAlgebra/Double/Factorization/UserQR.cs

@ -80,12 +80,12 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(r, i, i); u[i] = GenerateColumn(r, i, i);
ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.MaxDegreeOfParallelism);
} }
} }
else else
@ -95,7 +95,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(q, i, i); u[i] = GenerateColumn(q, i, i);
ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount); r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount);
@ -108,7 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Double.Factorization
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
} }

2
src/Numerics/LinearAlgebra/Single/Factorization/UserCholesky.cs

@ -85,7 +85,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(factor, factor.RowCount, ij + 1, factor.RowCount, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {

8
src/Numerics/LinearAlgebra/Single/Factorization/UserQR.cs

@ -80,12 +80,12 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(r, i, i); u[i] = GenerateColumn(r, i, i);
ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], r, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.RowCount, Control.MaxDegreeOfParallelism);
} }
} }
else else
@ -95,7 +95,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
u[i] = GenerateColumn(q, i, i); u[i] = GenerateColumn(q, i, i);
ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i + 1, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount); r = q.SubMatrix(0, matrix.ColumnCount, 0, matrix.ColumnCount);
@ -108,7 +108,7 @@ namespace MathNet.Numerics.LinearAlgebra.Single.Factorization
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.NumberOfParallelWorkerThreads); ComputeQR(u[i], q, i, matrix.RowCount, i, matrix.ColumnCount, Control.MaxDegreeOfParallelism);
} }
} }

10
src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex.cs

@ -1265,7 +1265,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {
@ -1546,12 +1546,12 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, r, rowsR, i, i); GenerateColumn(work, r, rowsR, i, i);
ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.MaxDegreeOfParallelism);
} }
work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR; work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR;
@ -1657,7 +1657,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, a, rowsA, i, i); GenerateColumn(work, a, rowsA, i, i);
ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.MaxDegreeOfParallelism);
} }
//copy R //copy R
@ -1680,7 +1680,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.MaxDegreeOfParallelism);
} }
work[0] = rowsA*columnsA; work[0] = rowsA*columnsA;

10
src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Complex32.cs

@ -1262,7 +1262,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {
@ -1543,12 +1543,12 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, r, rowsR, i, i); GenerateColumn(work, r, rowsR, i, i);
ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.MaxDegreeOfParallelism);
} }
work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR; work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR;
@ -1654,7 +1654,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, a, rowsA, i, i); GenerateColumn(work, a, rowsA, i, i);
ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.MaxDegreeOfParallelism);
} }
//copy R //copy R
@ -1677,7 +1677,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.MaxDegreeOfParallelism);
} }
work[0] = rowsA*columnsA; work[0] = rowsA*columnsA;

10
src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Double.cs

@ -1148,7 +1148,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {
@ -1430,12 +1430,12 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, r, rowsR, i, i); GenerateColumn(work, r, rowsR, i, i);
ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.MaxDegreeOfParallelism);
} }
work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR; work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR;
@ -1541,7 +1541,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, a, rowsA, i, i); GenerateColumn(work, a, rowsA, i, i);
ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.MaxDegreeOfParallelism);
} }
//copy R //copy R
@ -1564,7 +1564,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.MaxDegreeOfParallelism);
} }
work[0] = rowsA*columnsA; work[0] = rowsA*columnsA;

10
src/Numerics/Providers/LinearAlgebra/ManagedLinearAlgebraProvider.Single.cs

@ -1148,7 +1148,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
} }
// Remaining columns, below the diagonal // Remaining columns, below the diagonal
DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.NumberOfParallelWorkerThreads); DoCholeskyStep(a, order, ij + 1, order, tmpColumn, Control.MaxDegreeOfParallelism);
} }
else else
{ {
@ -1429,12 +1429,12 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, r, rowsR, i, i); GenerateColumn(work, r, rowsR, i, i);
ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, r, i, rowsR, i + 1, columnsR, Control.MaxDegreeOfParallelism);
} }
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, q, i, rowsR, i, rowsR, Control.MaxDegreeOfParallelism);
} }
work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR; work[0] = columnsR > rowsR ? rowsR*rowsR : rowsR*columnsR;
@ -1540,7 +1540,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = 0; i < minmn; i++) for (var i = 0; i < minmn; i++)
{ {
GenerateColumn(work, a, rowsA, i, i); GenerateColumn(work, a, rowsA, i, i);
ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i + 1, columnsA, Control.MaxDegreeOfParallelism);
} }
//copy R //copy R
@ -1563,7 +1563,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra
for (var i = minmn - 1; i >= 0; i--) for (var i = minmn - 1; i >= 0; i--)
{ {
ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.NumberOfParallelWorkerThreads); ComputeQR(work, i, a, i, rowsA, i, columnsA, Control.MaxDegreeOfParallelism);
} }
work[0] = rowsA*columnsA; work[0] = rowsA*columnsA;

6
src/Numerics/Random/Palf.cs

@ -124,7 +124,7 @@ namespace MathNet.Numerics.Random
seed = 1; seed = 1;
} }
_threads = Control.NumberOfParallelWorkerThreads; _threads = Control.MaxDegreeOfParallelism;
ShortLag = shortLag; ShortLag = shortLag;
// Align LongLag to number of worker threads. // Align LongLag to number of worker threads.
@ -234,7 +234,7 @@ namespace MathNet.Numerics.Random
seed = 1; seed = 1;
} }
int threads = Control.NumberOfParallelWorkerThreads; int threads = Control.MaxDegreeOfParallelism;
const int shortLag = DefaultShortLag; const int shortLag = DefaultShortLag;
var longLag = DefaultLongLag; var longLag = DefaultLongLag;
@ -284,7 +284,7 @@ namespace MathNet.Numerics.Random
seed = 1; seed = 1;
} }
int threads = Control.NumberOfParallelWorkerThreads; int threads = Control.MaxDegreeOfParallelism;
const int shortLag = DefaultShortLag; const int shortLag = DefaultShortLag;
var longLag = DefaultLongLag; var longLag = DefaultLongLag;

12
src/Numerics/Threading/CommonParallel.cs

@ -51,7 +51,7 @@ namespace MathNet.Numerics.Threading
{ {
return new ParallelOptions return new ParallelOptions
{ {
MaxDegreeOfParallelism = Control.NumberOfParallelWorkerThreads, MaxDegreeOfParallelism = Control.MaxDegreeOfParallelism,
TaskScheduler = Control.TaskScheduler, TaskScheduler = Control.TaskScheduler,
}; };
} }
@ -64,7 +64,7 @@ namespace MathNet.Numerics.Threading
/// <param name="body">The body to be invoked for each iteration range.</param> /// <param name="body">The body to be invoked for each iteration range.</param>
public static void For(int fromInclusive, int toExclusive, Action<int, int> body) public static void For(int fromInclusive, int toExclusive, Action<int, int> body)
{ {
For(fromInclusive, toExclusive, Math.Max(1, (toExclusive - fromInclusive)/Control.NumberOfParallelWorkerThreads), body); For(fromInclusive, toExclusive, Math.Max(1, (toExclusive - fromInclusive)/Control.MaxDegreeOfParallelism), body);
} }
/// <summary> /// <summary>
@ -90,7 +90,7 @@ namespace MathNet.Numerics.Threading
} }
// Special case: not worth to parallelize, inline // Special case: not worth to parallelize, inline
if (Control.NumberOfParallelWorkerThreads < 2 || (rangeSize * 2) > length) if (Control.MaxDegreeOfParallelism < 2 || (rangeSize * 2) > length)
{ {
body(fromInclusive, toExclusive); body(fromInclusive, toExclusive);
return; return;
@ -125,7 +125,7 @@ namespace MathNet.Numerics.Threading
} }
// Special case: straight execution without parallelism // Special case: straight execution without parallelism
if (Control.NumberOfParallelWorkerThreads < 2) if (Control.MaxDegreeOfParallelism < 2)
{ {
for (int i = 0; i < actions.Length; i++) for (int i = 0; i < actions.Length; i++)
{ {
@ -166,7 +166,7 @@ namespace MathNet.Numerics.Threading
} }
// Special case: straight execution without parallelism // Special case: straight execution without parallelism
if (Control.NumberOfParallelWorkerThreads < 2) if (Control.MaxDegreeOfParallelism < 2)
{ {
var mapped = new T[toExclusive - fromInclusive]; var mapped = new T[toExclusive - fromInclusive];
for (int k = 0; k < mapped.Length; k++) for (int k = 0; k < mapped.Length; k++)
@ -228,7 +228,7 @@ namespace MathNet.Numerics.Threading
} }
// Special case: straight execution without parallelism // Special case: straight execution without parallelism
if (Control.NumberOfParallelWorkerThreads < 2) if (Control.MaxDegreeOfParallelism < 2)
{ {
var mapped = new TOut[array.Length]; var mapped = new TOut[array.Length];
for (int k = 0; k < mapped.Length; k++) for (int k = 0; k < mapped.Length; k++)

Loading…
Cancel
Save