Browse Source

Bench: fft focus on radix2 and smaller N

pull/445/head
Christoph Ruegg 10 years ago
parent
commit
2e0fca5b72
  1. 49
      MathNet.Numerics.NativeProviders.sln
  2. 14
      src/Benchmark/Program.cs
  3. 12
      src/Benchmark/Transforms/FFT.cs

49
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

14
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<FFT>(config);

12
src/Benchmark/Transforms/FFT.cs

@ -11,16 +11,16 @@ namespace Benchmark.Transforms
{
readonly Dictionary<int, Complex[]> _data = new Dictionary<int, Complex[]>();
[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)]

Loading…
Cancel
Save