Fix Day 25 benchmark (#42)

This commit is contained in:
Patrick Stevens
2022-12-25 11:50:46 +00:00
committed by GitHub
parent c7c5ee91c0
commit da3a210bac
5 changed files with 78 additions and 48 deletions

View File

@@ -75,22 +75,27 @@ module Benchmarks =
[<GlobalCleanup>]
member _.Cleanup () = Run.shouldWrite <- true
let finalBenchmarkArgs = (25, false) :: List.allPairs [ 21..24 ] [ false ; true ]
type Benchmark21To25 () =
static member finalBenchmarkArgs =
(25, true) :: List.allPairs [ 21..24 ] [ false ; true ]
|> Seq.ofList
|> Seq.map box
[<GlobalSetup>]
member _.Setup () = Run.shouldWrite <- false
[<Params(21, 22, 23, 24)>]
member val Day = 0 with get, set
[<Params(false, true)>]
member val IsPartOne = false with get, set
[<Benchmark>]
[<ArgumentsSource(nameof (finalBenchmarkArgs))>]
member this.Benchmark () : unit =
Run.allRuns.[this.Day - 1] (not this.IsPartOne) (Inputs.day this.Day)
[<ArgumentsSource "finalBenchmarkArgs">]
member this.Benchmark (args : obj) : unit =
let day, isPartOne = unbox<int * bool> args
if day <= 24 then
Run.allRuns.[day - 1] (not isPartOne) (Inputs.day day)
else if not isPartOne || day <> 25 then
failwithf "Unexpected args: %+A" args
else
Run.day25 (Inputs.day 25)
[<GlobalCleanup>]
member _.Cleanup () = Run.shouldWrite <- true

View File

@@ -1,6 +1,7 @@
namespace AdventOfCode2022
open System
open System.Text
open Microsoft.FSharp.NativeInterop
#if DEBUG
@@ -29,18 +30,39 @@ module Day25 =
i
let rec ofInt (i : int64) : string =
if i <= 2L then
sprintf "%i" i
let ofInt (i : int64) : string =
let rec go (i : int64) (sb : ResizeArray<char>) =
if i = 0 then
sb.Add '0'
elif i = 1 then
sb.Add '1'
elif i = 2 then
sb.Add '2'
else
match i % 5L with
| 0L -> sprintf "%s0" (ofInt (i / 5L))
| 1L -> sprintf "%s1" (ofInt (i / 5L))
| 2L -> sprintf "%s2" (ofInt (i / 5L))
| 3L -> sprintf "%s=" (ofInt (i / 5L + 1L))
| 4L -> sprintf "%s-" (ofInt (i / 5L + 1L))
| 0L ->
sb.Add '0'
go (i / 5L) sb
| 1L ->
sb.Add '1'
go (i / 5L) sb
| 2L ->
sb.Add '2'
go (i / 5L) sb
| 3L ->
sb.Add '='
go (i / 5L + 1L) sb
| 4L ->
sb.Add '-'
go (i / 5L + 1L) sb
| _ -> failwith "maths doesn't work"
let sb = ResizeArray 27
go i sb
sb.Reverse ()
String (sb.ToArray ())
/// Returns the width and the height too. The resulting array is suitable to become an Arr2D.
let parse (line : StringSplitEnumerator) : int64 ResizeArray =
use mutable enum = line.GetEnumerator ()

View File

@@ -8,13 +8,14 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
```
| Method | Day | IsPartOne | Mean | Error | StdDev |
|---------- |---- |---------- |-------------:|------------:|------------:|
| **Benchmark** | **21** | **False** | **640.0 μs** | **4.20 μs** | **3.73 μs** |
| **Benchmark** | **21** | **True** | **579.2 μs** | **2.69 μs** | **2.38 μs** |
| **Benchmark** | **22** | **False** | **325.0 μs** | **1.48 μs** | **1.38 μs** |
| **Benchmark** | **22** | **True** | **218.2 μs** | **0.49 μs** | **0.43 μs** |
| **Benchmark** | **23** | **False** | **318,951.5 μs** | **4,809.31 μs** | **4,498.63 μs** |
| **Benchmark** | **23** | **True** | **2,715.4 μs** | **4.39 μs** | **3.43 μs** |
| **Benchmark** | **24** | **False** | **47,682.2 μs** | **44.89 μs** | **39.79 μs** |
| **Benchmark** | **24** | **True** | **15,713.4 μs** | **208.12 μs** | **173.79 μs** |
| Method | args | Mean | Error | StdDev |
|---------- |------------ |---------------:|--------------:|--------------:|
| **Benchmark** | **(21, False)** | **637.049 μs** | **1.0056 μs** | **0.8397 μs** |
| **Benchmark** | **(21, True)** | **575.965 μs** | **6.5023 μs** | **5.4297 μs** |
| **Benchmark** | **(22, False)** | **329.169 μs** | **1.9539 μs** | **1.8277 μs** |
| **Benchmark** | **(22, True)** | **216.176 μs** | **0.5694 μs** | **0.5327 μs** |
| **Benchmark** | **(23, False)** | **318,432.306 μs** | **5,235.8275 μs** | **4,897.5963 μs** |
| **Benchmark** | **(23, True)** | **2,694.296 μs** | **4.5002 μs** | **3.7579 μs** |
| **Benchmark** | **(24, False)** | **47,718.692 μs** | **106.8933 μs** | **89.2607 μs** |
| **Benchmark** | **(24, True)** | **15,540.162 μs** | **23.0957 μs** | **19.2860 μs** |
| **Benchmark** | **(25, True)** | **4.388 μs** | **0.0072 μs** | **0.0056 μs** |

View File

@@ -1,9 +1,10 @@
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Day,IsPartOne,Mean,Error,StdDev
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,False,640.0 μs,4.20 μs,3.73 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,21,True,579.2 μs,2.69 μs,2.38 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,False,325.0 μs,1.48 μs,1.38 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,22,True,218.2 μs,0.49 μs,0.43 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,False,"318,951.5 μs","4,809.31 μs","4,498.63 μs"
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,23,True,"2,715.4 μs",4.39 μs,3.43 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,24,False,"47,682.2 μs",44.89 μs,39.79 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,24,True,"15,713.4 μs",208.12 μs,173.79 μs
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,args,Mean,Error,StdDev
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(21, False)",637.049 μs,1.0056 μs,0.8397 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(21, True)",575.965 μs,6.5023 μs,5.4297 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(22, False)",329.169 μs,1.9539 μs,1.8277 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(22, True)",216.176 μs,0.5694 μs,0.5327 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(23, False)","318,432.306 μs","5,235.8275 μs","4,897.5963 μs"
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(23, True)","2,694.296 μs",4.5002 μs,3.7579 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(24, False)","47,718.692 μs",106.8933 μs,89.2607 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(24, True)","15,540.162 μs",23.0957 μs,19.2860 μs
Benchmark,DefaultJob,False,Default,Default,Default,Default,Default,Default,0000000000,Empty,RyuJit,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 7.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,"(25, True)",4.388 μs,0.0072 μs,0.0056 μs
1 Method Job AnalyzeLaunchVariance EvaluateOverhead MaxAbsoluteError MaxRelativeError MinInvokeCount MinIterationTime OutlierMode Affinity EnvironmentVariables Jit Platform PowerPlanMode Runtime AllowVeryLargeObjects Concurrent CpuGroups Force HeapAffinitizeMask HeapCount NoAffinitize RetainVm Server Arguments BuildConfiguration Clock EngineFactory NuGetReferences Toolchain IsMutator InvocationCount IterationCount IterationTime LaunchCount MaxIterationCount MaxWarmupIterationCount MemoryRandomization MinIterationCount MinWarmupIterationCount RunStrategy UnrollFactor WarmupCount Day args IsPartOne Mean Error StdDev
2 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 21 (21, False) False 640.0 μs 637.049 μs 4.20 μs 1.0056 μs 3.73 μs 0.8397 μs
3 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 21 (21, True) True 579.2 μs 575.965 μs 2.69 μs 6.5023 μs 2.38 μs 5.4297 μs
4 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 22 (22, False) False 325.0 μs 329.169 μs 1.48 μs 1.9539 μs 1.38 μs 1.8277 μs
5 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 22 (22, True) True 218.2 μs 216.176 μs 0.49 μs 0.5694 μs 0.43 μs 0.5327 μs
6 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 23 (23, False) False 318,951.5 μs 318,432.306 μs 4,809.31 μs 5,235.8275 μs 4,498.63 μs 4,897.5963 μs
7 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 23 (23, True) True 2,715.4 μs 2,694.296 μs 4.39 μs 4.5002 μs 3.43 μs 3.7579 μs
8 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 24 (24, False) False 47,682.2 μs 47,718.692 μs 44.89 μs 106.8933 μs 39.79 μs 89.2607 μs
9 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default 24 (24, True) True 15,713.4 μs 15,540.162 μs 208.12 μs 23.0957 μs 173.79 μs 19.2860 μs
10 Benchmark DefaultJob False Default Default Default Default Default Default 0000000000 Empty RyuJit Arm64 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c .NET 7.0 False True False True Default Default False False False Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default Default 16 Default (25, True) 4.388 μs 0.0072 μs 0.0056 μs

View File

@@ -2,7 +2,7 @@
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>AdventOfCode2022.App.Benchmarks.Benchmark21To25-20221225-094139</title>
<title>AdventOfCode2022.App.Benchmarks.Benchmark21To25-20221225-114355</title>
<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
@@ -22,16 +22,17 @@ Apple M1 Max, 1 CPU, 10 logical and 10 physical cores
<pre><code></code></pre>
<table>
<thead><tr><th>Method</th><th>Day</th><th>IsPartOne</th><th> Mean</th><th>Error</th><th>StdDev</th>
<thead><tr><th>Method</th><th> args</th><th> Mean</th><th> Error</th><th> StdDev</th>
</tr>
</thead><tbody><tr><td>Benchmark</td><td>21</td><td>False</td><td>640.0 &mu;s</td><td>4.20 &mu;s</td><td>3.73 &mu;s</td>
</tr><tr><td>Benchmark</td><td>21</td><td>True</td><td>579.2 &mu;s</td><td>2.69 &mu;s</td><td>2.38 &mu;s</td>
</tr><tr><td>Benchmark</td><td>22</td><td>False</td><td>325.0 &mu;s</td><td>1.48 &mu;s</td><td>1.38 &mu;s</td>
</tr><tr><td>Benchmark</td><td>22</td><td>True</td><td>218.2 &mu;s</td><td>0.49 &mu;s</td><td>0.43 &mu;s</td>
</tr><tr><td>Benchmark</td><td>23</td><td>False</td><td>318,951.5 &mu;s</td><td>4,809.31 &mu;s</td><td>4,498.63 &mu;s</td>
</tr><tr><td>Benchmark</td><td>23</td><td>True</td><td>2,715.4 &mu;s</td><td>4.39 &mu;s</td><td>3.43 &mu;s</td>
</tr><tr><td>Benchmark</td><td>24</td><td>False</td><td>47,682.2 &mu;s</td><td>44.89 &mu;s</td><td>39.79 &mu;s</td>
</tr><tr><td>Benchmark</td><td>24</td><td>True</td><td>15,713.4 &mu;s</td><td>208.12 &mu;s</td><td>173.79 &mu;s</td>
</thead><tbody><tr><td>Benchmark</td><td>(21, False)</td><td>637.049 &mu;s</td><td>1.0056 &mu;s</td><td>0.8397 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(21, True)</td><td>575.965 &mu;s</td><td>6.5023 &mu;s</td><td>5.4297 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(22, False)</td><td>329.169 &mu;s</td><td>1.9539 &mu;s</td><td>1.8277 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(22, True)</td><td>216.176 &mu;s</td><td>0.5694 &mu;s</td><td>0.5327 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(23, False)</td><td>318,432.306 &mu;s</td><td>5,235.8275 &mu;s</td><td>4,897.5963 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(23, True)</td><td>2,694.296 &mu;s</td><td>4.5002 &mu;s</td><td>3.7579 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(24, False)</td><td>47,718.692 &mu;s</td><td>106.8933 &mu;s</td><td>89.2607 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(24, True)</td><td>15,540.162 &mu;s</td><td>23.0957 &mu;s</td><td>19.2860 &mu;s</td>
</tr><tr><td>Benchmark</td><td>(25, True)</td><td>4.388 &mu;s</td><td>0.0072 &mu;s</td><td>0.0056 &mu;s</td>
</tr></tbody></table>
</body>
</html>