diff --git a/Microsoft.ML.sln b/Microsoft.ML.sln index d22e7ee013..5e81a5f3b0 100644 --- a/Microsoft.ML.sln +++ b/Microsoft.ML.sln @@ -168,6 +168,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.Tokenizers.Tes EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Microsoft.ML.FSharp.Tests", "test\Microsoft.ML.FSharp.Tests\Microsoft.ML.FSharp.Tests.fsproj", "{041CB5CD-5832-413E-A894-D9DBED210B16}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.Analysis.PerformanceTests", "test\Microsoft.Data.Analysis.PerformanceTests\Microsoft.Data.Analysis.PerformanceTests.csproj", "{FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -788,6 +790,14 @@ Global {041CB5CD-5832-413E-A894-D9DBED210B16}.Release|Any CPU.Build.0 = Release|Any CPU {041CB5CD-5832-413E-A894-D9DBED210B16}.Release|x64.ActiveCfg = Release|Any CPU {041CB5CD-5832-413E-A894-D9DBED210B16}.Release|x64.Build.0 = Release|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Debug|x64.ActiveCfg = Debug|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Debug|x64.Build.0 = Debug|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Release|Any CPU.Build.0 = Release|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Release|x64.ActiveCfg = Release|Any CPU + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -870,6 +880,7 @@ Global {BBC3A950-BD68-45AC-9DBD-A8F4D8847745} = {09EADF06-BE25-4228-AB53-95AE3E15B530} {C3D82402-F207-4F19-8C57-5AF0FBAF9682} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} {041CB5CD-5832-413E-A894-D9DBED210B16} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} + {FB8A8823-CC6C-4C2F-8539-05FBFB7C91CD} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {41165AF1-35BB-4832-A189-73060F82B01D} diff --git a/eng/Versions.props b/eng/Versions.props index d13d42aadc..1b38246918 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -74,7 +74,7 @@ 1.2.0 5.4.7 - 0.12.0 + 0.13.1 6.0.9 8.0.0-preview.3.23174.8 5.10.2 diff --git a/test/Microsoft.Data.Analysis.PerformanceTests/Microsoft.Data.Analysis.PerformanceTests.csproj b/test/Microsoft.Data.Analysis.PerformanceTests/Microsoft.Data.Analysis.PerformanceTests.csproj new file mode 100644 index 0000000000..fa3a7b571a --- /dev/null +++ b/test/Microsoft.Data.Analysis.PerformanceTests/Microsoft.Data.Analysis.PerformanceTests.csproj @@ -0,0 +1,18 @@ + + + + Exe + disable + net6.0 + false + + + + + + + + + + + diff --git a/test/Microsoft.Data.Analysis.PerformanceTests/PerformanceTests.cs b/test/Microsoft.Data.Analysis.PerformanceTests/PerformanceTests.cs new file mode 100644 index 0000000000..7343200603 --- /dev/null +++ b/test/Microsoft.Data.Analysis.PerformanceTests/PerformanceTests.cs @@ -0,0 +1,202 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using BenchmarkDotNet.Attributes; + +namespace Microsoft.Data.Analysis.PerformanceTests +{ + public class PerformanceTests + { + private const int ItemsCount = 1000000; + + private Int32DataFrameColumn _int32Column1; + private Int32DataFrameColumn _int32Column2; + + private Int16DataFrameColumn _int16Column1; + private Int16DataFrameColumn _int16Column2; + + private DoubleDataFrameColumn _doubleColumn1; + private DoubleDataFrameColumn _doubleColumn2; + + private SingleDataFrameColumn _floatColumn1; + private SingleDataFrameColumn _floatColumn2; + + [GlobalSetup] + public void SetUp() + { + var values = Enumerable.Range(1, ItemsCount).ToArray(); + + _int32Column1 = new Int32DataFrameColumn("Column1", values); + _int32Column2 = new Int32DataFrameColumn("Column2", values); + + var shortValues = values.Select(v => (short)(v % short.MaxValue + 1)).ToArray(); + _int16Column1 = new Int16DataFrameColumn("Column1", shortValues); + _int16Column2 = new Int16DataFrameColumn("Column2", shortValues); + + _doubleColumn1 = new DoubleDataFrameColumn("Column1", values.Select(v => (double)v)); + _doubleColumn2 = new DoubleDataFrameColumn("Column2", values.Select(v => (double)v)); + + _floatColumn1 = new SingleDataFrameColumn("Column1", values.Select(v => (float)v)); + _floatColumn2 = new SingleDataFrameColumn("Column2", values.Select(v => (float)v)); + } + + #region Addition + + [Benchmark] + public void Add_Int32() + { + var column = _int32Column1 + _int32Column2; + } + + [Benchmark] + public void Add_Int16() + { + var column = _int16Column1 + _int16Column2; + } + + [Benchmark] + public void Add_Double() + { + var column = _doubleColumn1 + _doubleColumn2; + } + + [Benchmark] + public void Add_Float() + { + var column = _floatColumn1 + _floatColumn2; + } + + [Benchmark] + public void Add_Int32_Int16() + { + var column = _int32Column1 + _int16Column2; + } + + [Benchmark] + public void Add_Double_Float() + { + var column = _doubleColumn1 + _floatColumn2; + } + #endregion + + #region Subtract + [Benchmark] + public void Subtract_Int32() + { + var column = _int32Column1 - _int32Column2; + } + + [Benchmark] + public void Subtract_Int16() + { + var column = _int16Column1 - _int16Column2; + } + + [Benchmark] + public void Subtract_Double() + { + var column = _doubleColumn1 - _doubleColumn2; + } + + [Benchmark] + public void Subtract_Float() + { + var column = _floatColumn1 - _floatColumn2; + } + + [Benchmark] + public void Subtract_Int32_Int16() + { + var column = _int32Column1 - _int16Column2; + } + + [Benchmark] + public void Subtract_Double_Float() + { + var column = _doubleColumn1 - _floatColumn2; + } + #endregion + + #region Multiply + [Benchmark] + public void Multiply_Int32() + { + var column = _int32Column1 * _int32Column2; + } + + [Benchmark] + public void Multiply_Int16() + { + var column = _int16Column1 * _int16Column2; + } + + [Benchmark] + public void Multiply_Double() + { + var column = _doubleColumn1 * _doubleColumn2; + } + + [Benchmark] + public void Multiply_Float() + { + var column = _floatColumn1 * _floatColumn2; + } + + [Benchmark] + public void Multiply_Int32_Int16() + { + var column = _int32Column1 * _int16Column2; + } + + [Benchmark] + public void Multiply_Double_Float() + { + var column = _doubleColumn1 * _floatColumn2; + } + #endregion + + #region Divide + [Benchmark] + public void Divide_Int32() + { + var column = _int32Column1 / _int32Column2; + } + + [Benchmark] + public void Divide_Int16() + { + var column = _int16Column1 / _int16Column2; + } + + [Benchmark] + public void Divide_Double() + { + var column = _doubleColumn1 / _doubleColumn2; + } + + [Benchmark] + public void Divide_Float() + { + var column = _floatColumn1 / _floatColumn2; + } + + [Benchmark] + public void Divide_Int32_Int16() + { + var column = _int32Column1 / _int16Column2; + } + + [Benchmark] + public void Divide_Double_Float() + { + var column = _doubleColumn1 / _floatColumn2; + } + #endregion + } +} diff --git a/test/Microsoft.Data.Analysis.PerformanceTests/Program.cs b/test/Microsoft.Data.Analysis.PerformanceTests/Program.cs new file mode 100644 index 0000000000..3e418c02fe --- /dev/null +++ b/test/Microsoft.Data.Analysis.PerformanceTests/Program.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using BenchmarkDotNet.Running; + + +namespace Microsoft.Data.Analysis.PerformanceTests +{ + class Program + { + public static void Main(string[] args) + { + var summary = BenchmarkRunner.Run(); + } + } +} diff --git a/test/Microsoft.ML.Benchmarks.Tests/BenchmarksTest.cs b/test/Microsoft.ML.Benchmarks.Tests/BenchmarksTest.cs index 4c19dc5d48..a2a9ec437a 100644 --- a/test/Microsoft.ML.Benchmarks.Tests/BenchmarksTest.cs +++ b/test/Microsoft.ML.Benchmarks.Tests/BenchmarksTest.cs @@ -52,7 +52,7 @@ where Attribute.IsDefined(type, typeof(CIBenchmark)) [MemberData(nameof(GetBenchmarks))] public void BenchmarksProjectIsNotBroken(Type type) { - var summary = BenchmarkRunner.Run(type, new TestConfig().With(new OutputLogger(output))); + var summary = BenchmarkRunner.Run(type, new TestConfig().AddLogger(new OutputLogger(output))); Assert.False(summary.HasCriticalValidationErrors, "The \"Summary\" should have NOT \"HasCriticalValidationErrors\""); diff --git a/test/Microsoft.ML.CpuMath.PerformanceTests/Program.cs b/test/Microsoft.ML.CpuMath.PerformanceTests/Program.cs index 566ec8e7ba..18125d25a6 100644 --- a/test/Microsoft.ML.CpuMath.PerformanceTests/Program.cs +++ b/test/Microsoft.ML.CpuMath.PerformanceTests/Program.cs @@ -16,8 +16,7 @@ public static void Main(string[] args) .Run(args, CreateCustomConfig()); private static IConfig CreateCustomConfig() - => DefaultConfig.Instance - .With(Job.Default - .With(InProcessEmitToolchain.Instance)); + => DefaultConfig.Instance.AddJob(Job.Default + .WithToolchain(InProcessEmitToolchain.Instance)); } } diff --git a/test/Microsoft.ML.PerformanceTests/Harness/Configs.cs b/test/Microsoft.ML.PerformanceTests/Harness/Configs.cs index 71c24c5567..c7dd80c90b 100644 --- a/test/Microsoft.ML.PerformanceTests/Harness/Configs.cs +++ b/test/Microsoft.ML.PerformanceTests/Harness/Configs.cs @@ -20,11 +20,11 @@ public RecommendedConfig() { Add(DefaultConfig.Instance); // this config contains all of the basic settings (exporters, columns etc) - Add(GetJobDefinition() // job defines how many times given benchmark should be executed + AddJob(GetJobDefinition()// job defines how many times given benchmark should be executed .WithCustomBuildConfiguration(GetBuildConfigurationName()) - .With(CreateToolchain())); // toolchain is responsible for generating, building and running dedicated executable per benchmark + .WithToolchain(CreateToolchain())); // toolchain is responsible for generating, building and running dedicated executable per benchmark - Add(new ExtraMetricColumn()); // an extra column that can display additional metric reported by the benchmarks + AddColumn(new ExtraMetricColumn()); // an extra column that can display additional metric reported by the benchmarks } protected virtual Job GetJobDefinition()