diff --git a/src/Benchmark/LinearAlgebra/DenseVectorAdd.cs b/src/Benchmark/LinearAlgebra/DenseVector.cs similarity index 83% rename from src/Benchmark/LinearAlgebra/DenseVectorAdd.cs rename to src/Benchmark/LinearAlgebra/DenseVector.cs index 74e909dd..282659f6 100644 --- a/src/Benchmark/LinearAlgebra/DenseVectorAdd.cs +++ b/src/Benchmark/LinearAlgebra/DenseVector.cs @@ -12,7 +12,7 @@ using Complex = System.Numerics.Complex; namespace Benchmark.LinearAlgebra { [Config(typeof(Config))] - public class DenseVectorAdd + public class DenseVector { class Config : ManualConfig { @@ -51,8 +51,8 @@ namespace Benchmark.LinearAlgebra double[] _a; double[] _b; - //Complex[] _ac; - //Complex[] _bc; + Complex[] _ac; + Complex[] _bc; //Vector _av; //Vector _bv; @@ -74,27 +74,31 @@ namespace Benchmark.LinearAlgebra _a = Generate.Normal(N, 2.0, 10.0); _b = Generate.Normal(N, 200.0, 10.0); - //_ac = Generate.Map2(_a, Generate.Normal(N, 2.0, 10.0), (a, i) => new Complex(a, i)); - //_bc = Generate.Map2(_b, Generate.Normal(N, 200.0, 10.0), (b, i) => new Complex(b, i)); + _ac = Generate.Map2(_a, Generate.Normal(N, 2.0, 10.0), (a, i) => new Complex(a, i)); + _bc = Generate.Map2(_b, Generate.Normal(N, 200.0, 10.0), (b, i) => new Complex(b, i)); //_av = Vector.Build.Dense(_a); //_bv = Vector.Build.Dense(_b); } - [Benchmark(OperationsPerInvoke = 1)] + //[Benchmark(OperationsPerInvoke = 1)] public double[] ProviderAddArrays() { double[] r = new double[_a.Length]; LinearAlgebraControl.Provider.AddArrays(_a, _b, r); return r; + + //Complex[] r = new Complex[_a.Length]; + //LinearAlgebraControl.Provider.AddArrays(_ac, _bc, r); + //return r; } - //[Benchmark(OperationsPerInvoke = 1)] - //public Complex[] ProviderAddArraysComplex() - //{ - // Complex[] r = new Complex[_a.Length]; - // LinearAlgebraControl.Provider.AddArrays(_ac, _bc, r); - // return r; - //} + [Benchmark(OperationsPerInvoke = 1)] + public double[] ProviderScaleArrays() + { + double[] r = new double[_a.Length]; + LinearAlgebraControl.Provider.ScaleArray(2.0, _a, r); + return r; + } //[Benchmark(OperationsPerInvoke = 1)] //public Vector VectorAddOp() diff --git a/src/Benchmark/Program.cs b/src/Benchmark/Program.cs index 0a568f1e..25cd5e41 100644 --- a/src/Benchmark/Program.cs +++ b/src/Benchmark/Program.cs @@ -15,7 +15,7 @@ namespace Benchmark { typeof(Transforms.FFT), typeof(LinearAlgebra.DenseMatrixProduct), - typeof(LinearAlgebra.DenseVectorAdd), + typeof(LinearAlgebra.DenseVector), }); switcher.Run(args); diff --git a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex.cs b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex.cs index ae0489d4..9d52b696 100644 --- a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex.cs +++ b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex.cs @@ -79,13 +79,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - 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] = y[i] + (alpha*x[i]); - } - }); + result[i] = y[i] + (alpha * x[i]); + } } } @@ -113,13 +110,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - CommonParallel.For(0, x.Length, 4096, (a, b) => + for (int i = 0; i < result.Length; i++) { - for (int i = a; i < b; i++) - { - result[i] = alpha*x[i]; - } - }); + result[i] = alpha * x[i]; + } } } @@ -135,13 +129,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed throw new ArgumentNullException("x"); } - CommonParallel.For(0, x.Length, 4096, (a, b) => + for (int i = 0; i < result.Length; i++) { - for (int i = a; i < b; i++) - { - result[i] = x[i].Conjugate(); - } - }); + result[i] = x[i].Conjugate(); + } } /// @@ -168,7 +159,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed throw new ArgumentException(Resources.ArgumentVectorsSameLength); } - var dot = Complex.Zero; + Complex dot = Complex.Zero; for (var index = 0; index < y.Length; index++) { dot += y[index]*x[index]; diff --git a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex32.cs b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex32.cs index 8cb0d202..c3dc12da 100644 --- a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex32.cs +++ b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Complex32.cs @@ -80,13 +80,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - 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] = y[i] + (alpha * x[i]); - } - }); + result[i] = y[i] + (alpha * x[i]); + } } } @@ -115,13 +112,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - CommonParallel.For(0, x.Length, 4096, (a, b) => + for (int i = 0; i < result.Length; i++) { - for (int i = a; i < b; i++) - { - result[i] = alpha * x[i]; - } - }); + result[i] = alpha * x[i]; + } } } @@ -137,13 +131,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed throw new ArgumentNullException("x"); } - CommonParallel.For(0, x.Length, 4096, (a, b) => + for (int i = 0; i < result.Length; i++) { - for (int i = a; i < b; i++) - { - result[i] = x[i].Conjugate(); - } - }); + result[i] = x[i].Conjugate(); + } } /// @@ -170,8 +161,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed throw new ArgumentException(Resources.ArgumentVectorsSameLength); } - var d = new Complex32(0.0F, 0.0F); - + Complex32 d = new Complex32(0.0F, 0.0F); for (var i = 0; i < y.Length; i++) { d += y[i]*x[i]; diff --git a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Double.cs b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Double.cs index 5d10928c..844957f4 100644 --- a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Double.cs +++ b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Double.cs @@ -78,13 +78,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - 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] = y[i] + (alpha * x[i]); - } - }); + result[i] = y[i] + (alpha * x[i]); + } } } @@ -112,13 +109,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - CommonParallel.For(0, x.Length, 4096, (a, b) => + for (int i = 0; i < result.Length; i++) { - for (int i = a; i < b; i++) - { - result[i] = alpha * x[i]; - } - }); + result[i] = alpha * x[i]; + } } } @@ -164,8 +158,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed throw new ArgumentException(Resources.ArgumentVectorsSameLength); } - var sum = 0.0; - + double sum = 0.0; for (var index = 0; index < y.Length; index++) { sum += y[index] * x[index]; diff --git a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Single.cs b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Single.cs index 7a47abae..8a5ff012 100644 --- a/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Single.cs +++ b/src/Numerics/Providers/LinearAlgebra/Managed/ManagedLinearAlgebraProvider.Single.cs @@ -78,13 +78,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - 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] = y[i] + (alpha * x[i]); - } - }); + result[i] = y[i] + (alpha * x[i]); + } } } @@ -112,13 +109,10 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed } else { - CommonParallel.For(0, x.Length, 4096, (a, b) => + for (int i = 0; i < result.Length; i++) { - for (int i = a; i < b; i++) - { - result[i] = alpha * x[i]; - } - }); + result[i] = alpha * x[i]; + } } } @@ -164,8 +158,7 @@ namespace MathNet.Numerics.Providers.LinearAlgebra.Managed throw new ArgumentException(Resources.ArgumentVectorsSameLength); } - var sum = 0.0f; - + float sum = 0.0f; for (var index = 0; index < y.Length; index++) { sum += y[index]*x[index];