From 2e0fca5b72197df59d87a00066de7dc022ff75b3 Mon Sep 17 00:00:00 2001 From: Christoph Ruegg Date: Sat, 15 Oct 2016 15:05:20 +0200 Subject: [PATCH] Bench: fft focus on radix2 and smaller N --- MathNet.Numerics.NativeProviders.sln | 49 ++++++++++++++++++++++++++++ src/Benchmark/Program.cs | 14 +++----- src/Benchmark/Transforms/FFT.cs | 12 +++---- 3 files changed, 60 insertions(+), 15 deletions(-) diff --git a/MathNet.Numerics.NativeProviders.sln b/MathNet.Numerics.NativeProviders.sln index cda37c05..f97324b6 100644 --- a/MathNet.Numerics.NativeProviders.sln +++ b/MathNet.Numerics.NativeProviders.sln @@ -55,6 +55,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{97C9717A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTests", "src\UnitTests\UnitTests.csproj", "{DAF07AA8-C5C9-4963-98F7-2C3285064DAD}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Benchmark", "src\Benchmark\Benchmark.csproj", "{F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -463,6 +465,53 @@ Global {DAF07AA8-C5C9-4963-98F7-2C3285064DAD}.Release-Signed|Win32.Build.0 = Release-Signed|Any CPU {DAF07AA8-C5C9-4963-98F7-2C3285064DAD}.Release-Signed|x64.ActiveCfg = Release-Signed|Any CPU {DAF07AA8-C5C9-4963-98F7-2C3285064DAD}.Release-Signed|x64.Build.0 = Release-Signed|Any CPU + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Any CPU.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Mixed Platforms.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|Win32.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.ActiveCfg = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Debug|x64.Build.0 = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Any CPU.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Mixed Platforms.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|Win32.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.ActiveCfg = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release|x64.Build.0 = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Any CPU.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Any CPU.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Mixed Platforms.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Mixed Platforms.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Win32.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|Win32.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|x64.ActiveCfg = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-CUDA|x64.Build.0 = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Any CPU.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Any CPU.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Mixed Platforms.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Mixed Platforms.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Win32.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|Win32.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|x64.ActiveCfg = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-MKL|x64.Build.0 = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Any CPU.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Any CPU.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Mixed Platforms.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Mixed Platforms.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Win32.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|Win32.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|x64.ActiveCfg = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-OpenBLAS|x64.Build.0 = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Any CPU.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Mixed Platforms.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.ActiveCfg = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|Win32.Build.0 = Release|x86 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.ActiveCfg = Release|x64 + {F2CA84AE-4B7C-46F5-9889-82BC5F9F0F4E}.Release-Signed|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Benchmark/Program.cs b/src/Benchmark/Program.cs index 1573a572..751bf923 100644 --- a/src/Benchmark/Program.cs +++ b/src/Benchmark/Program.cs @@ -11,16 +11,12 @@ namespace Benchmark { public static void Main() { - //Control.NativeProviderPath = @"..\..\..\..\out\MKL\Windows\"; - Control.NativeProviderPath = @"C:\Triage\NATIVE-Win\"; + Providers.ForceNativeMKL(); + Console.WriteLine("Linear Algebra: " + Control.LinearAlgebraProvider); + Console.WriteLine("FFT: " + Control.FourierTransformProvider); - Console.WriteLine("Providers:"); - if (Control.TryUseNativeMKL()) Console.WriteLine(Control.LinearAlgebraProvider); - if (Control.TryUseNativeCUDA()) Console.WriteLine(Control.LinearAlgebraProvider); - if (Control.TryUseNativeOpenBLAS()) Console.WriteLine(Control.LinearAlgebraProvider); - - var config = ManualConfig.Create(DefaultConfig.Instance) - .With(new MemoryDiagnoser(), new InliningDiagnoser()); + var config = ManualConfig.Create(DefaultConfig.Instance); + //.With(new MemoryDiagnoser(), new InliningDiagnoser()); BenchmarkRunner.Run(config); diff --git a/src/Benchmark/Transforms/FFT.cs b/src/Benchmark/Transforms/FFT.cs index a1a7757a..aad165af 100644 --- a/src/Benchmark/Transforms/FFT.cs +++ b/src/Benchmark/Transforms/FFT.cs @@ -11,16 +11,16 @@ namespace Benchmark.Transforms { readonly Dictionary _data = new Dictionary(); - [Params(64, 65, 4096, 4097, 65536, 65537, 1048576, 1048577)] + [Params(32, 64, 128, 1024, 8192, 65536)] public int N { get; set; } [Setup] public void Setup() { - var realSinusoidal = Generate.Sinusoidal(1048577, 32, -2.0, 2.0); - var imagSawtooth = Generate.Sawtooth(1048577, 32, -20.0, 20.0); + var realSinusoidal = Generate.Sinusoidal(65536, 32, -2.0, 2.0); + var imagSawtooth = Generate.Sawtooth(65536, 32, -20.0, 20.0); var signal = Generate.Map2(realSinusoidal, imagSawtooth, (r, i) => new Complex(r, i)); - foreach (var n in new[] { 64, 65, 4096, 4097, 65536, 65537, 1048576, 1048577 }) + foreach (var n in new[] { 32, 64, 128, 1024, 8192, 65536 }) { var s = new Complex[n]; Array.Copy(signal, 0, s, 0, n); @@ -33,8 +33,8 @@ namespace Benchmark.Transforms [Benchmark(Baseline = true, OperationsPerInvoke = 2)] public void Managed() { - Fourier.BluesteinForward(_data[N], FourierOptions.NoScaling); - Fourier.BluesteinInverse(_data[N], FourierOptions.NoScaling); + Fourier.Radix2Forward(_data[N], FourierOptions.NoScaling); + Fourier.Radix2Inverse(_data[N], FourierOptions.NoScaling); } [Benchmark(OperationsPerInvoke = 2)]