mirror of
https://github.com/Smaug123/AdventOfCode2022
synced 2025-10-05 09:38:40 +00:00
Fix Day 25 benchmark (#42)
This commit is contained in:
@@ -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
|
||||
|
@@ -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 ()
|
||||
|
@@ -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** |
|
||||
|
@@ -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
|
||||
|
|
@@ -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 μs</td><td>4.20 μs</td><td>3.73 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>21</td><td>True</td><td>579.2 μs</td><td>2.69 μs</td><td>2.38 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>22</td><td>False</td><td>325.0 μs</td><td>1.48 μs</td><td>1.38 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>22</td><td>True</td><td>218.2 μs</td><td>0.49 μs</td><td>0.43 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>23</td><td>False</td><td>318,951.5 μs</td><td>4,809.31 μs</td><td>4,498.63 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>23</td><td>True</td><td>2,715.4 μs</td><td>4.39 μs</td><td>3.43 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>24</td><td>False</td><td>47,682.2 μs</td><td>44.89 μs</td><td>39.79 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>24</td><td>True</td><td>15,713.4 μs</td><td>208.12 μs</td><td>173.79 μs</td>
|
||||
</thead><tbody><tr><td>Benchmark</td><td>(21, False)</td><td>637.049 μs</td><td>1.0056 μs</td><td>0.8397 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(21, True)</td><td>575.965 μs</td><td>6.5023 μs</td><td>5.4297 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(22, False)</td><td>329.169 μs</td><td>1.9539 μs</td><td>1.8277 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(22, True)</td><td>216.176 μs</td><td>0.5694 μs</td><td>0.5327 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(23, False)</td><td>318,432.306 μs</td><td>5,235.8275 μs</td><td>4,897.5963 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(23, True)</td><td>2,694.296 μs</td><td>4.5002 μs</td><td>3.7579 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(24, False)</td><td>47,718.692 μs</td><td>106.8933 μs</td><td>89.2607 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(24, True)</td><td>15,540.162 μs</td><td>23.0957 μs</td><td>19.2860 μs</td>
|
||||
</tr><tr><td>Benchmark</td><td>(25, True)</td><td>4.388 μs</td><td>0.0072 μs</td><td>0.0056 μs</td>
|
||||
</tr></tbody></table>
|
||||
</body>
|
||||
</html>
|
||||
|
Reference in New Issue
Block a user