diff --git a/.github/workflows/benchmark.yaml b/.github/workflows/benchmark.yaml new file mode 100644 index 0000000..2517d9f --- /dev/null +++ b/.github/workflows/benchmark.yaml @@ -0,0 +1,24 @@ +name: Benchmark + +on: + workflow_dispatch: + push: + branches: + - main + +jobs: + benchmark: + name: Run Benchmarks + runs-on: windows-latest + strategy: + matrix: + dotnet-version: [8.x, 9.x] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: ${{matrix.dotnet-version}} + dotnet-quality: "preview" + - name: Run benchmark + working-directory: src/FftSharp.Benchmark + run: dotnet run --exporters json --filter '*' \ No newline at end of file diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 47e2b01..f8d417f 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,14 +14,12 @@ jobs: runs-on: windows-latest steps: - name: 🛒 Checkout - uses: actions/checkout@v3 - - name: ✨ Setup .NET 6 - uses: actions/setup-dotnet@v3 - with: - dotnet-version: "6.0.x" + uses: actions/checkout@v4 + - name: ✨ Setup .NET + uses: actions/setup-dotnet@v4 - name: 🚚 Restore run: dotnet restore src - name: 🛠️ Build - run: dotnet build src --configuration Release --no-restore + run: dotnet build src - name: 🧪 Test - run: dotnet test src --configuration Release --no-build + run: dotnet test src \ No newline at end of file diff --git a/.github/workflows/package.yaml b/.github/workflows/package.yaml index d1388a7..bd2d1b4 100644 --- a/.github/workflows/package.yaml +++ b/.github/workflows/package.yaml @@ -9,30 +9,20 @@ jobs: runs-on: windows-latest steps: - name: 🛒 Checkout - uses: actions/checkout@v3 - - name: ✨ Setup .NET 6 - uses: actions/setup-dotnet@v3 - with: - dotnet-version: "6.0.x" + uses: actions/checkout@v4 + - name: ✨ Setup .NET + uses: actions/setup-dotnet@v4 - name: 🚚 Restore run: dotnet restore src - name: 🛠️ Build - run: dotnet build src --configuration Release --no-restore + run: dotnet build src - name: 🧪 Test - run: dotnet test src --configuration Release --no-build + run: dotnet test src - name: 📦 Pack - run: dotnet pack src --configuration Release --no-build - - name: 💾 Store - uses: actions/upload-artifact@v2 - with: - name: Packages - retention-days: 1 - path: | - src/FftSharp/bin/Release/*.nupkg - src/FftSharp/bin/Release/*.snupkg + run: dotnet pack src - name: 🔑 Secret uses: nuget/setup-nuget@v1 with: nuget-api-key: ${{ secrets.NUGET_API_KEY }} - name: 🚀 Deploy - run: nuget push "src\FftSharp\bin\Release\*.nupkg" -SkipDuplicate -Source https://api.nuget.org/v3/index.json + run: nuget push "src\FftSharp\bin\Release\*.nupkg" -SkipDuplicate -Source https://api.nuget.org/v3/index.json \ No newline at end of file diff --git a/src/FftSharp.Benchmark/BenchmarkLoadData.cs b/src/FftSharp.Benchmark/BenchmarkLoadData.cs new file mode 100644 index 0000000..febcc04 --- /dev/null +++ b/src/FftSharp.Benchmark/BenchmarkLoadData.cs @@ -0,0 +1,17 @@ +namespace FftSharp.Benchmark; + +public static class BenchmarkLoadData +{ + public static double[] Double(string fileName) => + File.ReadLines(fileName) + .Where(x => !x.StartsWith('#') && x.Length > 1) + .Select(x => double.Parse(x)) + .ToArray(); + + public static System.Numerics.Complex[] Complex(string fileName) => + File.ReadLines(fileName) + .Select(x => x.Trim('(').Trim(')').Trim('j')) + .Select(x => x.Replace("-", " -").Replace("+", " +").Trim()) + .Select(x => new System.Numerics.Complex(double.Parse(x.Split(' ')[0]), double.Parse(x.Split(' ')[1]))) + .ToArray(); +} diff --git a/src/FftSharp.Benchmark/Benchmarking.md b/src/FftSharp.Benchmark/Benchmarking.md new file mode 100644 index 0000000..0d5fe4f --- /dev/null +++ b/src/FftSharp.Benchmark/Benchmarking.md @@ -0,0 +1,49 @@ +# Benchmarking + +## Benchmarking FFTSharp + +To run the benchmarks navigate to the `src/FftSharp.Benchmark` directory and run the following command: + +```bash +dotnet run -c Release +``` + +## Results 12/20/2023 + +### BluesteinSizeBenchmark +``` +BenchmarkDotNet v0.13.11, Windows 11 (10.0.22631.2861/23H2/2023Update/SunValley3) +Intel Core i7-1065G7 CPU 1.30GHz, 1 CPU, 8 logical and 4 physical cores +.NET SDK 8.0.100 + [Host] : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2 + .NET 6.0 : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2 + .NET 8.0 : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI +``` +| Method | Job | Runtime | DataLength | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | +|---------- |--------- |--------- |----------- |-------------:|-------------:|-------------:|---------:|---------:|---------:|------------:| +| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **100** | **26.40 μs** | **0.401 μs** | **0.375 μs** | **7.1716** | **0.0305** | **-** | **29.36 KB** | +| Bluestein | .NET 8.0 | .NET 8.0 | 100 | 24.97 μs | 0.321 μs | 0.284 μs | 7.1716 | - | - | 29.36 KB | +| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **1000** | **247.14 μs** | **3.809 μs** | **3.181 μs** | **58.1055** | **16.1133** | **-** | **239.49 KB** | +| Bluestein | .NET 8.0 | .NET 8.0 | 1000 | 239.35 μs | 4.046 μs | 3.379 μs | 58.1055 | 16.3574 | - | 239.49 KB | +| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **10000** | **5,426.03 μs** | **88.896 μs** | **102.372 μs** | **984.3750** | **984.3750** | **984.3750** | **3641.08 KB** | +| Bluestein | .NET 8.0 | .NET 8.0 | 10000 | 5,348.21 μs | 103.018 μs | 86.025 μs | 984.3750 | 984.3750 | 984.3750 | 3641.04 KB | +| **Bluestein** | **.NET 6.0** | **.NET 6.0** | **100000** | **84,122.15 μs** | **1,655.385 μs** | **2,374.104 μs** | **833.3333** | **833.3333** | **833.3333** | **29749.57 KB** | +| Bluestein | .NET 8.0 | .NET 8.0 | 100000 | 83,047.50 μs | 1,654.760 μs | 2,718.818 μs | 666.6667 | 666.6667 | 666.6667 | 29751.45 KB | + +### FftBenchmark +``` +BenchmarkDotNet v0.13.11, Windows 11 (10.0.22631.2861/23H2/2023Update/SunValley3) +Intel Core i7-1065G7 CPU 1.30GHz, 1 CPU, 8 logical and 4 physical cores +.NET SDK 8.0.100 + [Host] : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2 + .NET 6.0 : .NET 6.0.25 (6.0.2523.51912), X64 RyuJIT AVX2 + .NET 8.0 : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI +``` +| Method | Job | Runtime | Mean | Error | StdDev | Gen0 | Gen1 | Allocated | +|------------------------ |--------- |--------- |----------:|---------:|---------:|--------:|--------:|----------:| +| FFT_Forward | .NET 6.0 | .NET 6.0 | 41.47 μs | 0.722 μs | 0.676 μs | 1.9531 | - | 8.02 KB | +| FFT_ForwardReal | .NET 6.0 | .NET 6.0 | 42.72 μs | 0.715 μs | 0.669 μs | 2.9297 | - | 12.06 KB | +| FFT_BluesteinComparason | .NET 6.0 | .NET 6.0 | 233.21 μs | 3.444 μs | 3.053 μs | 54.4434 | 15.3809 | 224.24 KB | +| FFT_Forward | .NET 8.0 | .NET 8.0 | 41.08 μs | 0.749 μs | 0.585 μs | 1.9531 | - | 8.02 KB | +| FFT_ForwardReal | .NET 8.0 | .NET 8.0 | 41.79 μs | 0.788 μs | 0.698 μs | 2.9297 | - | 12.06 KB | +| FFT_BluesteinComparason | .NET 8.0 | .NET 8.0 | 223.61 μs | 4.330 μs | 4.633 μs | 54.4434 | 15.3809 | 224.23 KB | \ No newline at end of file diff --git a/src/FftSharp.Benchmark/BluesteinSizeBenchmark.cs b/src/FftSharp.Benchmark/BluesteinSizeBenchmark.cs new file mode 100644 index 0000000..23ea71c --- /dev/null +++ b/src/FftSharp.Benchmark/BluesteinSizeBenchmark.cs @@ -0,0 +1,34 @@ +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Jobs; +using MathNet.Numerics; +namespace FftSharp.Benchmark; + +[MemoryDiagnoser] +[SimpleJob(RuntimeMoniker.Net60)] +[SimpleJob(RuntimeMoniker.Net80)] +public class BluesteinSizeBenchmark +{ + private double[] Sample; + [Params(100, 1000, 10_000, 100_000)] + public int DataLength { get ; set; } + public double Frequency = 60; + public double SampleRate = 1000; + + [GlobalSetup] + public void BluesteinSizeBenchmarkSetup() + { + this.Sample = Generate.Sinusoidal(this.DataLength, this.SampleRate, this.Frequency, 1); + if(this.Sample.Length != this.DataLength) + { + throw new Exception("Sample length does not match DataLength"); + } + } + + [Benchmark] + public void Bluestein() + { + var something = Experimental.Bluestein(this.Sample); + } + +} + diff --git a/src/FftSharp.Benchmark/FftBenchmark.cs b/src/FftSharp.Benchmark/FftBenchmark.cs new file mode 100644 index 0000000..36a1cec --- /dev/null +++ b/src/FftSharp.Benchmark/FftBenchmark.cs @@ -0,0 +1,36 @@ +using BenchmarkDotNet.Attributes; +using BenchmarkDotNet.Jobs; + +namespace FftSharp.Benchmark; +[SimpleJob(RuntimeMoniker.Net60)] +[SimpleJob(RuntimeMoniker.Net80)] +[MemoryDiagnoser] +public class FftBenchmark +{ + private double[] Sample; + + [GlobalSetup] + public void FftBenchmarkSetup() + { + this.Sample = BenchmarkLoadData.Double("sample.txt"); + } + + [Benchmark] + public void FFT_Forward() + { + var something = FFT.Forward(this.Sample); + } + + [Benchmark] + public void FFT_ForwardReal() + { + var something = FFT.ForwardReal(this.Sample); + } + + [Benchmark] + public void FFT_BluesteinComparason() + { + var something = Experimental.Bluestein(this.Sample); + } +} + diff --git a/src/FftSharp.Benchmark/FftSharp.Benchmark.csproj b/src/FftSharp.Benchmark/FftSharp.Benchmark.csproj new file mode 100644 index 0000000..1b1fd9f --- /dev/null +++ b/src/FftSharp.Benchmark/FftSharp.Benchmark.csproj @@ -0,0 +1,29 @@ + + + + Exe + net8.0 + enable + $(NoWarn);CA1018;CA5351;CA1825;CA8618 + + + + + + + + + + + + + + + + + + Always + + + + diff --git a/src/FftSharp.Benchmark/Program.cs b/src/FftSharp.Benchmark/Program.cs new file mode 100644 index 0000000..2b12659 --- /dev/null +++ b/src/FftSharp.Benchmark/Program.cs @@ -0,0 +1,16 @@ +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Environments; +using BenchmarkDotNet.Jobs; +using BenchmarkDotNet.Running; + +namespace FftSharp.Benchmark; + +public class Program +{ + static void Main(string[] args) + { + Console.WriteLine("FftSharp Benchmarks!"); + BenchmarkRunner.Run(); + BenchmarkRunner.Run(); + } +} diff --git a/src/FftSharp.Benchmark/sample.txt b/src/FftSharp.Benchmark/sample.txt new file mode 100644 index 0000000..1399ed0 --- /dev/null +++ b/src/FftSharp.Benchmark/sample.txt @@ -0,0 +1,523 @@ +# These data simulate a sample of audio with the following parameters: +# sample rate: 48 kHz +# points: 512 (2^9) +# offset: 0.1 (above zero) +# tone: 2 kHz (amplitude 2) +# tone: 10 kHz (amplitude 10) +# tone: 20 kHz (amplitude .5) +# +# Quick and dirty checksum +# the sum of these values is 71.52 +# the sum of the sins of these values is 10.417026634786811 ++0.33 ++2.15 ++1.44 ++1.37 ++0.24 ++2.60 ++3.51 ++1.98 ++1.88 ++0.08 ++1.82 ++1.30 ++0.23 +-1.16 +-1.35 +-0.58 +-0.84 +-1.35 +-2.72 +-2.53 +-0.02 +-0.76 +-0.48 +-2.10 ++0.30 ++1.86 ++1.60 ++1.49 ++0.58 ++2.12 ++2.79 ++1.99 ++1.20 ++0.80 ++2.18 ++1.60 +-0.37 +-1.25 +-1.99 ++0.35 +-1.19 +-1.62 +-3.28 +-2.57 ++0.07 +-0.81 +-1.13 +-1.68 +-0.25 ++1.55 ++1.08 ++1.53 ++0.65 ++2.53 ++2.79 ++2.42 ++1.72 ++0.54 ++2.39 ++1.51 ++0.22 +-1.42 +-1.44 ++0.29 +-1.61 +-1.50 +-3.23 +-2.20 +-0.01 +-1.39 +-0.47 +-1.65 ++0.25 ++2.05 ++1.48 ++0.91 ++0.76 ++2.76 ++2.73 ++2.45 ++1.09 ++0.28 ++2.07 ++1.16 ++0.27 +-1.17 +-1.50 ++0.20 +-0.91 +-1.58 +-2.46 +-2.55 +-0.31 +-0.94 +-1.13 +-1.85 ++0.42 ++1.56 ++0.85 ++0.88 ++0.66 ++2.73 ++3.23 ++2.47 ++1.12 ++0.74 ++1.60 ++1.73 ++0.28 +-1.54 +-2.18 +-0.50 +-1.09 +-1.39 +-2.91 +-2.69 +-0.16 +-1.04 +-1.24 +-1.52 +-0.39 ++1.69 ++1.52 ++0.87 ++0.31 ++2.75 ++3.56 ++2.53 ++1.29 ++0.33 ++1.81 ++1.34 ++0.13 +-1.58 +-2.05 +-0.11 +-0.85 +-1.73 +-3.30 +-2.10 +-0.43 +-0.67 +-1.34 +-1.43 ++0.22 ++2.16 ++1.35 ++1.38 ++0.21 ++2.23 ++3.21 ++1.79 ++1.90 ++0.38 ++1.60 ++1.10 ++0.44 +-1.07 +-1.69 +-0.09 +-0.73 +-2.26 +-2.89 +-2.68 +-0.02 +-0.96 +-0.89 +-1.58 ++0.27 ++2.33 ++0.97 ++0.87 ++0.50 ++2.52 ++2.82 ++1.61 ++1.13 +-0.04 ++1.98 ++1.28 +-0.38 +-1.24 +-1.52 +-0.40 +-0.79 +-2.31 +-2.89 +-1.88 ++0.16 +-1.59 +-0.81 +-1.86 ++0.57 ++1.92 ++1.44 ++1.13 ++0.45 ++3.02 ++3.49 ++2.51 ++1.15 +-0.06 ++2.43 ++1.01 ++0.48 +-1.09 +-1.55 +-0.09 +-1.35 +-1.35 +-3.37 +-2.15 +-0.71 +-1.41 +-0.97 +-1.55 +-0.14 ++1.64 ++0.91 ++1.59 ++0.17 ++2.65 ++3.16 ++2.20 ++1.24 +-0.17 ++1.63 ++1.71 ++0.31 +-0.74 +-1.68 +-0.35 +-1.43 +-1.87 +-3.20 +-1.95 +-0.34 +-0.97 +-1.15 +-1.76 +-0.16 ++2.33 ++1.28 ++0.81 ++1.02 ++3.00 ++2.76 ++2.31 ++0.99 +-0.00 ++1.60 ++0.94 ++0.33 +-1.53 +-1.49 ++0.04 +-1.13 +-2.10 +-2.56 +-1.98 +-0.39 +-0.70 +-0.66 +-1.67 +-0.06 ++2.11 ++1.09 ++1.45 ++1.03 ++2.65 ++2.69 ++2.16 ++1.89 ++0.68 ++2.07 ++0.97 +-0.40 +-1.08 +-1.66 +-0.23 +-0.83 +-2.02 +-2.61 +-2.32 +-0.00 +-1.07 +-0.94 +-1.97 ++0.23 ++1.89 ++0.98 ++1.06 ++0.83 ++2.50 ++3.52 ++1.88 ++1.09 +-0.04 ++2.19 ++1.04 ++0.13 +-1.12 +-1.56 +-0.12 +-1.60 +-1.90 +-3.28 +-1.98 +-0.27 +-0.90 +-0.83 +-2.12 ++0.17 ++1.79 ++1.66 ++0.93 ++0.15 ++2.32 ++3.23 ++2.34 ++1.15 ++0.07 ++1.55 ++1.28 +-0.11 +-0.79 +-1.51 +-0.08 +-0.75 +-2.14 +-2.45 +-1.99 ++0.06 +-1.14 +-0.62 +-1.78 ++0.15 ++1.64 ++1.09 ++1.20 ++0.45 ++2.70 ++3.20 ++2.47 ++1.81 ++0.11 ++2.21 ++1.18 ++0.07 +-0.83 +-2.12 ++0.30 +-1.18 +-1.48 +-2.45 +-2.57 +-0.34 +-1.28 +-1.28 +-1.87 ++0.22 ++1.92 ++1.58 ++1.17 ++0.79 ++2.83 ++2.72 ++1.64 ++1.51 ++0.44 ++2.10 ++1.65 ++0.46 +-1.39 +-1.96 +-0.01 +-1.04 +-2.26 +-2.87 +-1.85 +-0.67 +-1.13 +-1.40 +-1.98 ++0.59 ++1.37 ++1.00 ++0.84 ++0.55 ++2.61 ++3.46 ++1.76 ++1.02 +-0.04 ++2.31 ++1.67 ++0.35 +-1.39 +-2.16 +-0.48 +-1.52 +-1.76 +-2.67 +-2.01 +-0.60 +-1.21 +-1.42 +-1.85 ++0.08 ++1.69 ++1.27 ++1.22 ++0.83 ++2.23 ++2.70 ++1.68 ++1.42 ++0.56 ++1.91 ++1.55 ++0.06 +-1.55 +-1.75 +-0.57 +-0.92 +-1.99 +-2.70 +-2.13 +-0.37 +-1.06 +-0.63 +-1.71 ++0.51 ++1.74 ++1.48 ++1.39 ++0.78 ++2.27 ++3.52 ++2.13 ++1.89 +-0.14 ++2.08 ++0.99 ++0.57 +-1.19 +-1.90 ++0.32 +-1.64 +-1.70 +-3.09 +-1.84 ++0.03 +-1.15 +-0.80 +-2.04 ++0.59 ++2.02 ++0.72 ++1.69 ++0.73 ++2.38 ++3.42 ++2.48 ++1.42 +-0.01 ++2.04 ++1.22 +-0.02 +-1.11 +-1.95 +-0.32 +-0.87 +-1.55 +-2.67 +-2.44 +-0.30 +-1.18 +-1.39 +-1.80 ++0.52 ++2.11 ++1.32 ++1.63 ++0.27 ++2.88 ++3.16 ++1.99 ++1.64 ++0.53 ++2.12 ++0.90 +-0.22 +-1.59 +-1.45 ++0.05 +-1.46 +-1.73 +-2.76 +-2.06 ++0.10 +-1.56 +-0.92 +-1.60 +-0.14 ++1.35 ++0.83 ++0.88 ++0.76 ++2.30 ++3.16 ++2.11 \ No newline at end of file diff --git a/src/FftSharp.Demo/FftSharp.Demo.csproj b/src/FftSharp.Demo/FftSharp.Demo.csproj index 9be88bf..97b1177 100644 --- a/src/FftSharp.Demo/FftSharp.Demo.csproj +++ b/src/FftSharp.Demo/FftSharp.Demo.csproj @@ -1,6 +1,6 @@  - net6.0-windows + net8.0-windows WinExe false true diff --git a/src/FftSharp.Tests/FftSharp.Tests.csproj b/src/FftSharp.Tests/FftSharp.Tests.csproj index 6da4e56..f3da40f 100644 --- a/src/FftSharp.Tests/FftSharp.Tests.csproj +++ b/src/FftSharp.Tests/FftSharp.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 false 10 diff --git a/src/FftSharp.sln b/src/FftSharp.sln index 2dd38a1..b2b5005 100644 --- a/src/FftSharp.sln +++ b/src/FftSharp.sln @@ -1,37 +1,43 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31815.197 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp", "FftSharp\FftSharp.csproj", "{43680BFA-9D82-41F2-A56A-6B93433AE4E1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FftSharp.Demo", "FftSharp.Demo\FftSharp.Demo.csproj", "{9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp.Tests", "FftSharp.Tests\FftSharp.Tests.csproj", "{A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.Build.0 = Release|Any CPU - {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.Build.0 = Release|Any CPU - {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {1721ADCD-AF40-45E0-A3AA-DE007761C72A} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31815.197 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp", "FftSharp\FftSharp.csproj", "{43680BFA-9D82-41F2-A56A-6B93433AE4E1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp.Demo", "FftSharp.Demo\FftSharp.Demo.csproj", "{9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FftSharp.Tests", "FftSharp.Tests\FftSharp.Tests.csproj", "{A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FftSharp.Benchmark", "FftSharp.Benchmark\FftSharp.Benchmark.csproj", "{A3DE12AF-60E1-4CF2-86BF-73C2B345091B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43680BFA-9D82-41F2-A56A-6B93433AE4E1}.Release|Any CPU.Build.0 = Release|Any CPU + {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9EA24240-F1BF-4C5F-B08C-6D5C8AFBFDE7}.Release|Any CPU.Build.0 = Release|Any CPU + {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A82CD7FC-ECA6-4BF7-BC73-22675DEC1CD0}.Release|Any CPU.Build.0 = Release|Any CPU + {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3DE12AF-60E1-4CF2-86BF-73C2B345091B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1721ADCD-AF40-45E0-A3AA-DE007761C72A} + EndGlobalSection +EndGlobal diff --git a/src/FftSharp/FftSharp.csproj b/src/FftSharp/FftSharp.csproj index d5842da..0ec6c36 100644 --- a/src/FftSharp/FftSharp.csproj +++ b/src/FftSharp/FftSharp.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net6.0 + netstandard2.0;net8.0 false Library https://github.com/swharden/FftSharp @@ -35,7 +35,7 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all