Browse Source

LA: managed provider no longer parallelizes pointwise multiply loops

pull/555/merge
Christoph Ruegg 8 years ago
parent
commit
de17f4d291
  1. 34
      src/Benchmark/LinearAlgebra/DenseVector.cs
  2. 9
      src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex.cs
  3. 9
      src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex32.cs
  4. 9
      src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Double.cs
  5. 9
      src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Single.cs

34
src/Benchmark/LinearAlgebra/DenseVector.cs

@ -43,10 +43,10 @@ namespace Benchmark.LinearAlgebra
NativeMKL,
}
[Params(4, 32, 128, 4096, 524288)]
[Params(4, 32, 128, 4096, 16384, 524288)]
public int N { get; set; }
[Params(ProviderId.Managed, ProviderId.ManagedReference, ProviderId.NativeMKL)]
[Params(ProviderId.Managed, ProviderId.ManagedReference)] //, ProviderId.NativeMKL)]
public ProviderId Provider { get; set; }
double[] _a;
@ -92,7 +92,7 @@ namespace Benchmark.LinearAlgebra
//return r;
}
[Benchmark(OperationsPerInvoke = 1)]
//[Benchmark(OperationsPerInvoke = 1)]
public double[] ProviderScaleArrays()
{
double[] r = new double[_a.Length];
@ -100,6 +100,34 @@ namespace Benchmark.LinearAlgebra
return r;
}
[Benchmark(OperationsPerInvoke = 1)]
public double[] ProviderPointMultiply()
{
double[] r = new double[_a.Length];
LinearAlgebraControl.Provider.PointWiseMultiplyArrays(_a, _b, r);
return r;
//Complex[] r = new Complex[_a.Length];
//LinearAlgebraControl.Provider.PointWiseMultiplyArrays(_ac, _bc, r);
//return r;
}
//[Benchmark(OperationsPerInvoke = 1)]
public double[] ProviderPointDivide()
{
double[] r = new double[_a.Length];
LinearAlgebraControl.Provider.PointWiseDivideArrays(_a, _b, r);
return r;
}
//[Benchmark(OperationsPerInvoke = 1)]
public double[] ProviderPointPower()
{
double[] r = new double[_a.Length];
LinearAlgebraControl.Provider.PointWisePowerArrays(_a, _b, r);
return r;
}
//[Benchmark(OperationsPerInvoke = 1)]
//public Vector<double> VectorAddOp()
//{

9
src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex.cs

@ -276,13 +276,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed
throw new ArgumentException(Resources.ArgumentVectorsSameLength);
}
CommonParallel.For(0, y.Length, 4096, (a, b) =>
for (int i = 0; i < result.Length; i++)
{
for (int i = a; i < b; i++)
{
result[i] = x[i] * y[i];
}
});
result[i] = x[i] * y[i];
}
}
/// <summary>

9
src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex32.cs

@ -278,13 +278,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed
throw new ArgumentException(Resources.ArgumentVectorsSameLength);
}
CommonParallel.For(0, y.Length, 4096, (a, b) =>
for (int i = 0; i < result.Length; i++)
{
for (int i = a; i < b; i++)
{
result[i] = x[i] * y[i];
}
});
result[i] = x[i] * y[i];
}
}
/// <summary>

9
src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Double.cs

@ -275,13 +275,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed
throw new ArgumentException(Resources.ArgumentVectorsSameLength);
}
CommonParallel.For(0, y.Length, 4096, (a, b) =>
for (int i = 0; i < result.Length; i++)
{
for (int i = a; i < b; i++)
{
result[i] = x[i] * y[i];
}
});
result[i] = x[i] * y[i];
}
}
/// <summary>

9
src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Single.cs

@ -275,13 +275,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed
throw new ArgumentException(Resources.ArgumentVectorsSameLength);
}
CommonParallel.For(0, y.Length, 4096, (a, b) =>
for (int i = 0; i < result.Length; i++)
{
for (int i = a; i < b; i++)
{
result[i] = x[i] * y[i];
}
});
result[i] = x[i] * y[i];
}
}
/// <summary>

Loading…
Cancel
Save