plutus icon indicating copy to clipboard operation
plutus copied to clipboard

[Builtins] Add support for pattern matching builtins

Open effectfully opened this issue 1 year ago • 24 comments

This PR is an EXPERIMENT, it's not intended for merging, so don't.

It's a proof-of-concept, there's undefined in the code and whatnot.

The main change is replacing

data BuiltinRuntime val
    = BuiltinResult ExBudget ~(MakeKnownM val)
    | <...>

with

data BuiltinRuntime val
    = BuiltinResult ExBudget ~(MakeKnownM (HeadSpine val))
    | <...>

where HeadSpine is a fancy name for NonEmpty:

data Spine a
    = NilSpine
    | ConsSpine a (Spine a)

data HeadSpine a
    = HeadSpine a (Spine a)

(we define a separate type, because we want strictness, and you don't see any bangs, because it's in a module with StrictData enabled).

The idea is that a builtin application can return a function applied to a bunch of arguments, which is exactly what we need to be able to express caseList

caseList xs0 f z = case xs0 of
   []   -> z
   x:xs -> f x xs

as a builtin:

-- | Package a function and a list of its arguments as a 'HeadSpine'.
headSpine :: Opaque val ab -> [val] -> Opaque (HeadSpine val) b
headSpine (Opaque f) = Opaque . HeadSpine f . foldr ConsSpine NilSpine

instance uni ~ DefaultUni => ToBuiltinMeaning uni DefaultFun where
    <...>
    toBuiltinMeaning _ver CaseList =
        makeBuiltinMeaning
            caseListPlc
            (\_ _ _ _ -> ExBudget 1 0)  -- TODO.
        where
          caseListPlc
              :: SomeConstant uni [a]
              -> Opaque val b
              -> Opaque val (a -> [a] -> b)
              -> EvaluationResult (Opaque (HeadSpine val) b)
          caseListPlc (SomeConstant (Some (ValueOf uniListA xs0))) z f = do
            DefaultUniList uniA <- pure uniListA
            pure $ case xs0 of
                []     -> headSpine z []                                             -- [1]
                x : xs -> headSpine f [fromValueOf uniA x, fromValueOf uniListA xs]  -- [2]

Being able to express [1] (representing z) and [2] (representing f x xs) is precisely what this PR enables.

Adding support for the new functionality to the CEK machine is trivial. All we need is a way to push a Spine of arguments onto the context:

    pushArgs :: Spine (CekValue uni fun ann) -> Context uni fun ann -> Context uni fun ann
    pushArgs args ctx = foldr FrameAwaitFunValue ctx args

and a HeadSpine version of returnCek:

    returnCekHeadSpine
        :: Context uni fun ann
        -> HeadSpine (CekValue uni fun ann)
        -> CekM uni fun s (Term NamedDeBruijn uni fun ())
    returnCekHeadSpine ctx (HeadSpine f xs) = returnCek (pushArgs xs ctx) f

Then replacing

    MakeKnownSuccess x -> returnCek

with

    MakeKnownSuccess fXs -> returnCekNonEmpty ctx fXs

(and similarly for MakeKnownSuccessWithLogs) will do the trick.

We used to define caseList in terms of IfThenElse, NullList and either HeadList or TailList depending on the result of NullList, i.e. three builtin calls in the worst and in the best case. Then we introduced ChooseList, which replaced both IfThenElse and NullList in caseList thus bringing total amount of builtin calls down to 2 in all cases. This turned out to have a substantial impact on performance. This PR allows us to bring total number of builtin calls per caseList invokation down to 1 -- the CaseList builtin itself.

If we're going to officially support encoding data types using Data the ideas described here may be worthwhile.

effectfully avatar Aug 21 '23 22:08 effectfully

I'm a bit confused about what this would entail for the PLC language. Would there be a new builtin-function? would case be a new language construct?

mjaskelioff avatar Sep 08 '23 18:09 mjaskelioff

I'm a bit confused about what this would entail for the PLC language. Would there be a new builtin-function? would case be a new language construct?

No new language constructs. New built-in functions (caseList in the description of the PR, plus caseData in the PR), plus a bit of changes to the builtins machinery and the CEK machine (see in the PR, it's a surprisingly small amount of changes).

effectfully avatar Sep 08 '23 20:09 effectfully

I saw the PR, but it's about code and I don't fully understand the consequences of the code for PLC. What would be the type of caseList?

mjaskelioff avatar Sep 08 '23 22:09 mjaskelioff

What would be the type of caseList?

It's in the PR, the plutus-core/plutus-core/test/TypeSynthesis/Golden/CaseList.plc.golden file (there's a golden file with a type signature for every builtin, including the proposed ones):

(all
  a
  (type)
  (all
    b
    (type)
    (fun [ (con list) a ] (fun b (fun (fun a (fun [ (con list) a ] b)) b)))
  )
)

or if you're not a Cylon:

all a b. list a -> b -> (a -> list a -> b) -> b

This is the type of the built-in function, i.e. what this PR proposed to implement support for.

We also have a function that is confusingly named the same (the one in stdlib), but has all b and the subsequent list a swapped, because it's some extremely outdated legacy code that was introduced in order to make it easy to replace unwrap-based code with code that uses pattern matching. Basically, if you see StdLib in the name of a file in this PR, ignore it, it's not really useful for anything and it's not used other than for tests. I apologize for the confusion, I should've specified that stdlib stuff should be ignored, it was just for me to test that the proposed builtins type check and evaluate fine.

effectfully avatar Sep 09 '23 03:09 effectfully

We will need to decide what to do with the spec and metatheory regarding the types of builtins

I think types aren't complicated? You just add -> to the type of signatures of builtins and that's it. Or am I missing something?

Specifying the operational semantics of builtins does sound somewhat complicated. "So if f is an argument to a built-in function, then you can return f x, but not f (f x)" -- pretty stupid.

Which is why my original plan was to allow arbitrary trees of application (in the sense of Data.Tree.Tree), not just a head and a spine-as-a-list. That is harder to cost (I still think it's not a big deal and is much easier than, say, equalsData for the kind of builtins that we may want to represent that way), requires extensive discussion on why I believe this is useful (in particular, Michael doesn't trust me that I can define much faster unsafeFromBuiltinData this way and maybe he's right) and is generally more complicated, so I thought it would be worth starting with a simpler but still useful thing first, hence this PR.

effectfully avatar Sep 11 '23 13:09 effectfully

Which is why my original plan was to allow arbitrary trees of application (in the sense of Data.Tree.Tree), not just a head and a spine-as-a-list.

Is the "real" answer here that we can return any term that introduces no new variable binders? e.g. introducing force/delay/constr all also seem fine, because it's adding new binders that really throws us off (because then we'd need to shift any binders in the input terms depending on where we put them, etc.

Of course, our arguments are values and not terms, so we can't actually construct a term, instead we have to construct an evaluation continuation or something, so that does make things more complicated. And maybe the most useful and straightforward evaluation continuation is just a spine of applications. Although even then... can I do this?

\h a -> h 1 a

or this?

\h a -> h (addInteger 1 2) a

michaelpj avatar Sep 12 '23 09:09 michaelpj

/benchmark plutus-benchmark:nofib

effectfully avatar Nov 13 '23 13:11 effectfully

Click here to check the status of your benchmark.

github-actions[bot] avatar Nov 13 '23 13:11 github-actions[bot]

/benchmark plutus-benchmark:lists

effectfully avatar Nov 13 '23 14:11 effectfully

Comparing benchmark results of 'plutus-benchmark:nofib' on '159e5bd8e' (base) and '26b546339' (PR)

Results table
Script 159e5bd 26b5463 Change
clausify/formula1 4.687 ms 4.846 ms +3.4%
clausify/formula2 6.178 ms 6.361 ms +3.0%
clausify/formula3 16.79 ms 17.27 ms +2.9%
clausify/formula4 35.17 ms 36.24 ms +3.0%
clausify/formula5 81.37 ms 83.75 ms +2.9%
knights/4x4 28.01 ms 28.78 ms +2.7%
knights/6x6 78.50 ms 80.69 ms +2.8%
knights/8x8 158.5 ms 162.7 ms +2.6%
primetest/05digits 14.66 ms 15.10 ms +3.0%
primetest/08digits 24.28 ms 25.22 ms +3.9%
primetest/10digits 29.90 ms 31.08 ms +3.9%
primetest/20digits 67.11 ms 69.09 ms +3.0%
primetest/30digits 105.1 ms 108.0 ms +2.8%
primetest/40digits 145.3 ms 150.4 ms +3.5%
primetest/50digits 155.9 ms 161.5 ms +3.6%
queens4x4/bt 6.925 ms 7.112 ms +2.7%
queens4x4/bm 8.811 ms 9.065 ms +2.9%
queens4x4/bjbt1 8.481 ms 8.738 ms +3.0%
queens4x4/bjbt2 7.864 ms 8.116 ms +3.2%
queens4x4/fc 18.42 ms 19.03 ms +3.3%
queens5x5/bt 92.60 ms 95.18 ms +2.8%
queens5x5/bm 98.97 ms 101.6 ms +2.7%
queens5x5/bjbt1 109.1 ms 112.0 ms +2.7%
queens5x5/bjbt2 105.2 ms 108.3 ms +2.9%
queens5x5/fc 235.0 ms 243.0 ms +3.4%

github-actions[bot] avatar Nov 13 '23 14:11 github-actions[bot]

Click here to check the status of your benchmark.

github-actions[bot] avatar Nov 13 '23 14:11 github-actions[bot]

+3% on average on the builtins-heavy nofib benchmarks. Not too bad I guess and maybe I could squeeze some performance out of it.

effectfully avatar Nov 13 '23 15:11 effectfully

Comparing benchmark results of 'plutus-benchmark:lists' on '159e5bd8e' (base) and '26b546339' (PR)

Results table
Script 159e5bd 26b5463 Change
sort/ghcSort/10 47.86 μs 47.92 μs +0.1%
sort/ghcSort/20 110.5 μs 109.3 μs -1.1%
sort/ghcSort/30 170.0 μs 170.3 μs +0.2%
sort/ghcSort/40 249.9 μs 250.5 μs +0.2%
sort/ghcSort/50 311.3 μs 308.4 μs -0.9%
sort/ghcSort/60 388.2 μs 387.4 μs -0.2%
sort/ghcSort/70 505.8 μs 503.8 μs -0.4%
sort/ghcSort/80 571.8 μs 568.5 μs -0.6%
sort/ghcSort/90 633.0 μs 629.9 μs -0.5%
sort/ghcSort/100 712.1 μs 710.6 μs -0.2%
sort/ghcSort/110 783.1 μs 778.3 μs -0.6%
sort/ghcSort/120 885.6 μs 882.3 μs -0.4%
sort/ghcSort/130 1.086 ms 1.086 ms 0.0%
sort/ghcSort/140 1.152 ms 1.149 ms -0.3%
sort/ghcSort/150 1.232 ms 1.232 ms 0.0%
sort/ghcSort/160 1.311 ms 1.317 ms +0.5%
sort/ghcSort/170 1.392 ms 1.388 ms -0.3%
sort/ghcSort/180 1.461 ms 1.463 ms +0.1%
sort/ghcSort/190 1.551 ms 1.548 ms -0.2%
sort/ghcSort/200 1.661 ms 1.656 ms -0.3%
sort/ghcSort/210 1.730 ms 1.731 ms +0.1%
sort/ghcSort/220 1.813 ms 1.809 ms -0.2%
sort/ghcSort/230 1.945 ms 1.938 ms -0.4%
sort/ghcSort/240 2.052 ms 2.053 ms +0.0%
sort/ghcSort/250 2.151 ms 2.149 ms -0.1%
sort/ghcSort/260 2.477 ms 2.470 ms -0.3%
sort/ghcSort/270 2.555 ms 2.538 ms -0.7%
sort/ghcSort/280 2.621 ms 2.616 ms -0.2%
sort/ghcSort/290 2.713 ms 2.713 ms 0.0%
sort/ghcSort/300 2.807 ms 2.804 ms -0.1%
sort/ghcSort/310 2.909 ms 2.896 ms -0.4%
sort/ghcSort/320 2.983 ms 2.996 ms +0.4%
sort/ghcSort/330 3.087 ms 3.075 ms -0.4%
sort/ghcSort/340 3.172 ms 3.165 ms -0.2%
sort/ghcSort/350 3.244 ms 3.244 ms 0.0%
sort/ghcSort/360 3.336 ms 3.330 ms -0.2%
sort/ghcSort/370 3.437 ms 3.425 ms -0.3%
sort/ghcSort/380 3.549 ms 3.536 ms -0.4%
sort/ghcSort/390 3.686 ms 3.706 ms +0.5%
sort/ghcSort/400 3.786 ms 3.802 ms +0.4%
sort/ghcSort/410 3.845 ms 3.842 ms -0.1%
sort/ghcSort/420 3.972 ms 3.982 ms +0.3%
sort/ghcSort/430 4.038 ms 4.039 ms +0.0%
sort/ghcSort/440 4.153 ms 4.152 ms -0.0%
sort/ghcSort/450 4.381 ms 4.378 ms -0.1%
sort/ghcSort/460 4.434 ms 4.440 ms +0.1%
sort/ghcSort/470 4.549 ms 4.541 ms -0.2%
sort/ghcSort/480 4.691 ms 4.687 ms -0.1%
sort/ghcSort/490 4.785 ms 4.792 ms +0.1%
sort/ghcSort/500 4.922 ms 4.920 ms -0.0%
sort/insertionSort/10 44.37 μs 44.51 μs +0.3%
sort/insertionSort/20 160.6 μs 160.0 μs -0.4%
sort/insertionSort/30 351.9 μs 349.2 μs -0.8%
sort/insertionSort/40 614.9 μs 609.2 μs -0.9%
sort/insertionSort/50 951.2 μs 943.6 μs -0.8%
sort/insertionSort/60 1.373 ms 1.360 ms -0.9%
sort/insertionSort/70 1.854 ms 1.840 ms -0.8%
sort/insertionSort/80 2.414 ms 2.399 ms -0.6%
sort/insertionSort/90 3.060 ms 3.025 ms -1.1%
sort/insertionSort/100 3.772 ms 3.725 ms -1.2%
sort/insertionSort/110 4.532 ms 4.505 ms -0.6%
sort/insertionSort/120 5.401 ms 5.361 ms -0.7%
sort/insertionSort/130 6.370 ms 6.289 ms -1.3%
sort/insertionSort/140 7.401 ms 7.267 ms -1.8%
sort/insertionSort/150 8.421 ms 8.380 ms -0.5%
sort/insertionSort/160 9.591 ms 9.520 ms -0.7%
sort/insertionSort/170 10.87 ms 10.77 ms -0.9%
sort/insertionSort/180 12.21 ms 12.02 ms -1.6%
sort/insertionSort/190 13.59 ms 13.41 ms -1.3%
sort/insertionSort/200 15.06 ms 14.94 ms -0.8%
sort/insertionSort/210 16.58 ms 16.44 ms -0.8%
sort/insertionSort/220 18.11 ms 18.06 ms -0.3%
sort/insertionSort/230 19.86 ms 19.83 ms -0.2%
sort/insertionSort/240 21.64 ms 21.50 ms -0.6%
sort/insertionSort/250 23.46 ms 23.42 ms -0.2%
sort/insertionSort/260 25.47 ms 25.22 ms -1.0%
sort/insertionSort/270 27.50 ms 27.29 ms -0.8%
sort/insertionSort/280 29.54 ms 29.32 ms -0.7%
sort/insertionSort/290 31.80 ms 31.63 ms -0.5%
sort/insertionSort/300 34.07 ms 33.71 ms -1.1%
sort/insertionSort/310 36.26 ms 35.99 ms -0.7%
sort/insertionSort/320 38.87 ms 38.63 ms -0.6%
sort/insertionSort/330 41.25 ms 40.94 ms -0.8%
sort/insertionSort/340 43.74 ms 43.50 ms -0.5%
sort/insertionSort/350 46.44 ms 46.04 ms -0.9%
sort/insertionSort/360 49.12 ms 49.00 ms -0.2%
sort/insertionSort/370 52.09 ms 51.63 ms -0.9%
sort/insertionSort/380 54.98 ms 54.85 ms -0.2%
sort/insertionSort/390 58.09 ms 57.84 ms -0.4%
sort/insertionSort/400 60.70 ms 60.81 ms +0.2%
sort/insertionSort/410 64.34 ms 63.85 ms -0.8%
sort/insertionSort/420 67.28 ms 66.90 ms -0.6%
sort/insertionSort/430 70.62 ms 70.72 ms +0.1%
sort/insertionSort/440 73.90 ms 73.61 ms -0.4%
sort/insertionSort/450 77.43 ms 76.98 ms -0.6%
sort/insertionSort/460 81.24 ms 81.12 ms -0.1%
sort/insertionSort/470 84.72 ms 83.99 ms -0.9%
sort/insertionSort/480 88.27 ms 87.73 ms -0.6%
sort/insertionSort/490 92.17 ms 91.94 ms -0.2%
sort/insertionSort/500 95.69 ms 96.09 ms +0.4%
sort/mergeSort/10 115.4 μs 114.3 μs -1.0%
sort/mergeSort/20 277.6 μs 275.5 μs -0.8%
sort/mergeSort/30 457.4 μs 456.3 μs -0.2%
sort/mergeSort/40 650.0 μs 650.7 μs +0.1%
sort/mergeSort/50 843.0 μs 843.6 μs +0.1%
sort/mergeSort/60 1.062 ms 1.067 ms +0.5%
sort/mergeSort/70 1.275 ms 1.282 ms +0.5%
sort/mergeSort/80 1.504 ms 1.498 ms -0.4%
sort/mergeSort/90 1.721 ms 1.733 ms +0.7%
sort/mergeSort/100 1.945 ms 1.956 ms +0.6%
sort/mergeSort/110 2.175 ms 2.181 ms +0.3%
sort/mergeSort/120 2.430 ms 2.429 ms -0.0%
sort/mergeSort/130 2.697 ms 2.712 ms +0.6%
sort/mergeSort/140 2.904 ms 2.917 ms +0.4%
sort/mergeSort/150 3.131 ms 3.142 ms +0.4%
sort/mergeSort/160 3.411 ms 3.418 ms +0.2%
sort/mergeSort/170 3.638 ms 3.644 ms +0.2%
sort/mergeSort/180 3.893 ms 3.910 ms +0.4%
sort/mergeSort/190 4.153 ms 4.176 ms +0.6%
sort/mergeSort/200 4.391 ms 4.420 ms +0.7%
sort/mergeSort/210 4.667 ms 4.695 ms +0.6%
sort/mergeSort/220 4.914 ms 4.928 ms +0.3%
sort/mergeSort/230 5.181 ms 5.224 ms +0.8%
sort/mergeSort/240 5.447 ms 5.475 ms +0.5%
sort/mergeSort/250 5.763 ms 5.782 ms +0.3%
sort/mergeSort/260 6.020 ms 6.042 ms +0.4%
sort/mergeSort/270 6.249 ms 6.265 ms +0.3%
sort/mergeSort/280 6.494 ms 6.555 ms +0.9%
sort/mergeSort/290 6.746 ms 6.773 ms +0.4%
sort/mergeSort/300 6.991 ms 7.031 ms +0.6%
sort/mergeSort/310 7.261 ms 7.319 ms +0.8%
sort/mergeSort/320 7.603 ms 7.657 ms +0.7%
sort/mergeSort/330 7.833 ms 7.845 ms +0.2%
sort/mergeSort/340 8.095 ms 8.148 ms +0.7%
sort/mergeSort/350 8.392 ms 8.477 ms +1.0%
sort/mergeSort/360 8.700 ms 8.720 ms +0.2%
sort/mergeSort/370 8.970 ms 9.012 ms +0.5%
sort/mergeSort/380 9.291 ms 9.336 ms +0.5%
sort/mergeSort/390 9.572 ms 9.610 ms +0.4%
sort/mergeSort/400 9.767 ms 9.833 ms +0.7%
sort/mergeSort/410 10.11 ms 10.13 ms +0.2%
sort/mergeSort/420 10.39 ms 10.43 ms +0.4%
sort/mergeSort/430 10.71 ms 10.75 ms +0.4%
sort/mergeSort/440 10.92 ms 10.97 ms +0.5%
sort/mergeSort/450 11.17 ms 11.28 ms +1.0%
sort/mergeSort/460 11.50 ms 11.62 ms +1.0%
sort/mergeSort/470 11.79 ms 11.91 ms +1.0%
sort/mergeSort/480 12.12 ms 12.19 ms +0.6%
sort/mergeSort/490 12.46 ms 12.53 ms +0.6%
sort/mergeSort/500 12.78 ms 12.87 ms +0.7%
sort/quickSort/10 106.6 μs 102.7 μs -3.7%
sort/quickSort/20 390.7 μs 380.6 μs -2.6%
sort/quickSort/30 853.0 μs 835.3 μs -2.1%
sort/quickSort/40 1.518 ms 1.485 ms -2.2%
sort/quickSort/50 2.374 ms 2.342 ms -1.3%
sort/quickSort/60 3.415 ms 3.370 ms -1.3%
sort/quickSort/70 4.658 ms 4.571 ms -1.9%
sort/quickSort/80 6.100 ms 5.990 ms -1.8%
sort/quickSort/90 7.739 ms 7.589 ms -1.9%
sort/quickSort/100 9.455 ms 9.276 ms -1.9%
sort/quickSort/110 11.48 ms 11.30 ms -1.6%
sort/quickSort/120 13.62 ms 13.45 ms -1.2%
sort/quickSort/130 16.03 ms 15.77 ms -1.6%
sort/quickSort/140 18.41 ms 18.13 ms -1.5%
sort/quickSort/150 21.23 ms 20.90 ms -1.6%
sort/quickSort/160 24.05 ms 23.67 ms -1.6%
sort/quickSort/170 27.15 ms 26.76 ms -1.4%
sort/quickSort/180 30.44 ms 30.07 ms -1.2%
sort/quickSort/190 33.90 ms 33.43 ms -1.4%
sort/quickSort/200 37.55 ms 36.90 ms -1.7%
sort/quickSort/210 41.40 ms 40.83 ms -1.4%
sort/quickSort/220 45.40 ms 44.64 ms -1.7%
sort/quickSort/230 49.61 ms 49.00 ms -1.2%
sort/quickSort/240 54.10 ms 53.38 ms -1.3%
sort/quickSort/250 58.68 ms 57.60 ms -1.8%
sort/quickSort/260 63.36 ms 62.56 ms -1.3%
sort/quickSort/270 68.31 ms 67.42 ms -1.3%
sort/quickSort/280 73.48 ms 72.49 ms -1.3%
sort/quickSort/290 78.92 ms 77.64 ms -1.6%
sort/quickSort/300 84.46 ms 83.00 ms -1.7%
sort/quickSort/310 90.40 ms 88.97 ms -1.6%
sort/quickSort/320 96.27 ms 94.73 ms -1.6%
sort/quickSort/330 102.3 ms 100.8 ms -1.5%
sort/quickSort/340 109.3 ms 107.2 ms -1.9%
sort/quickSort/350 115.6 ms 113.6 ms -1.7%
sort/quickSort/360 121.8 ms 120.1 ms -1.4%
sort/quickSort/370 129.4 ms 127.0 ms -1.9%
sort/quickSort/380 136.2 ms 134.1 ms -1.5%
sort/quickSort/390 143.1 ms 141.5 ms -1.1%
sort/quickSort/400 151.1 ms 148.6 ms -1.7%
sort/quickSort/410 159.0 ms 156.6 ms -1.5%
sort/quickSort/420 166.8 ms 164.3 ms -1.5%
sort/quickSort/430 174.9 ms 173.0 ms -1.1%
sort/quickSort/440 182.9 ms 180.5 ms -1.3%
sort/quickSort/450 192.3 ms 190.0 ms -1.2%
sort/quickSort/460 200.7 ms 198.2 ms -1.2%
sort/quickSort/470 209.9 ms 207.1 ms -1.3%
sort/quickSort/480 218.5 ms 215.9 ms -1.2%
sort/quickSort/490 228.6 ms 225.5 ms -1.4%
sort/quickSort/500 237.5 ms 234.2 ms -1.4%
sum/compiled-from-Haskell/sum-right-builtin/10 12.51 μs 9.214 μs -26.3%
sum/compiled-from-Haskell/sum-right-builtin/50 57.72 μs 42.59 μs -26.2%
sum/compiled-from-Haskell/sum-right-builtin/100 116.5 μs 84.57 μs -27.4%
sum/compiled-from-Haskell/sum-right-builtin/500 607.9 μs 450.0 μs -26.0%
sum/compiled-from-Haskell/sum-right-builtin/1000 1.317 ms 979.5 μs -25.6%
sum/compiled-from-Haskell/sum-right-builtin/5000 8.578 ms 6.866 ms -20.0%
sum/compiled-from-Haskell/sum-right-builtin/10000 18.58 ms 15.77 ms -15.1%
sum/compiled-from-Haskell/sum-right-Scott/10 9.632 μs 9.467 μs -1.7%
sum/compiled-from-Haskell/sum-right-Scott/50 44.39 μs 43.47 μs -2.1%
sum/compiled-from-Haskell/sum-right-Scott/100 87.75 μs 86.14 μs -1.8%
sum/compiled-from-Haskell/sum-right-Scott/500 461.3 μs 451.1 μs -2.2%
sum/compiled-from-Haskell/sum-right-Scott/1000 994.0 μs 978.2 μs -1.6%
sum/compiled-from-Haskell/sum-right-Scott/5000 7.075 ms 7.108 ms +0.5%
sum/compiled-from-Haskell/sum-right-Scott/10000 16.39 ms 16.68 ms +1.8%
sum/compiled-from-Haskell/sum-right-data/10 27.13 μs 21.44 μs -21.0%
sum/compiled-from-Haskell/sum-right-data/50 130.4 μs 102.8 μs -21.2%
sum/compiled-from-Haskell/sum-right-data/100 261.8 μs 206.4 μs -21.2%
sum/compiled-from-Haskell/sum-right-data/500 1.437 ms 1.102 ms -23.3%
sum/compiled-from-Haskell/sum-right-data/1000 3.256 ms 2.477 ms -23.9%
sum/compiled-from-Haskell/sum-right-data/5000 18.35 ms 14.01 ms -23.7%
sum/compiled-from-Haskell/sum-right-data/10000 38.45 ms 29.27 ms -23.9%
sum/compiled-from-Haskell/sum-left-builtin/10 11.97 μs 9.103 μs -24.0%
sum/compiled-from-Haskell/sum-left-builtin/50 56.78 μs 42.14 μs -25.8%
sum/compiled-from-Haskell/sum-left-builtin/100 114.2 μs 83.71 μs -26.7%
sum/compiled-from-Haskell/sum-left-builtin/500 595.5 μs 442.5 μs -25.7%
sum/compiled-from-Haskell/sum-left-builtin/1000 1.285 ms 961.1 μs -25.2%
sum/compiled-from-Haskell/sum-left-builtin/5000 8.402 ms 6.963 ms -17.1%
sum/compiled-from-Haskell/sum-left-builtin/10000 17.98 ms 15.10 ms -16.0%
sum/compiled-from-Haskell/sum-left-Scott/10 9.593 μs 9.195 μs -4.1%
sum/compiled-from-Haskell/sum-left-Scott/50 44.19 μs 42.22 μs -4.5%
sum/compiled-from-Haskell/sum-left-Scott/100 87.30 μs 83.83 μs -4.0%
sum/compiled-from-Haskell/sum-left-Scott/500 455.6 μs 437.7 μs -3.9%
sum/compiled-from-Haskell/sum-left-Scott/1000 972.4 μs 937.9 μs -3.5%
sum/compiled-from-Haskell/sum-left-Scott/5000 7.083 ms 6.908 ms -2.5%
sum/compiled-from-Haskell/sum-left-Scott/10000 16.05 ms 15.77 ms -1.7%
sum/compiled-from-Haskell/sum-left-data/10 27.90 μs 21.60 μs -22.6%
sum/compiled-from-Haskell/sum-left-data/50 131.6 μs 103.0 μs -21.7%
sum/compiled-from-Haskell/sum-left-data/100 266.1 μs 206.5 μs -22.4%
sum/compiled-from-Haskell/sum-left-data/500 1.455 ms 1.101 ms -24.3%
sum/compiled-from-Haskell/sum-left-data/1000 3.264 ms 2.448 ms -25.0%
sum/compiled-from-Haskell/sum-left-data/5000 18.29 ms 13.94 ms -23.8%
sum/compiled-from-Haskell/sum-left-data/10000 37.77 ms 28.84 ms -23.6%
sum/hand-written-PLC/sum-right-builtin/10 12.10 μs 9.780 μs -19.2%
sum/hand-written-PLC/sum-right-builtin/50 55.14 μs 44.91 μs -18.6%
sum/hand-written-PLC/sum-right-builtin/100 109.1 μs 88.54 μs -18.8%
sum/hand-written-PLC/sum-right-builtin/500 551.7 μs 450.2 μs -18.4%
sum/hand-written-PLC/sum-right-builtin/1000 1.127 ms 920.1 μs -18.4%
sum/hand-written-PLC/sum-right-builtin/5000 6.327 ms 5.326 ms -15.8%
sum/hand-written-PLC/sum-right-builtin/10000 12.88 ms 10.98 ms -14.8%
sum/hand-written-PLC/sum-right-Scott/10 8.318 μs 8.365 μs +0.6%
sum/hand-written-PLC/sum-right-Scott/50 36.50 μs 35.55 μs -2.6%
sum/hand-written-PLC/sum-right-Scott/100 70.72 μs 70.22 μs -0.7%
sum/hand-written-PLC/sum-right-Scott/500 360.1 μs 358.6 μs -0.4%
sum/hand-written-PLC/sum-right-Scott/1000 739.6 μs 733.7 μs -0.8%
sum/hand-written-PLC/sum-right-Scott/5000 4.825 ms 4.798 ms -0.6%
sum/hand-written-PLC/sum-right-Scott/10000 10.52 ms 10.54 ms +0.2%
sum/hand-written-PLC/sum-left-builtin/10 12.91 μs 10.99 μs -14.9%
sum/hand-written-PLC/sum-left-builtin/50 58.87 μs 49.32 μs -16.2%
sum/hand-written-PLC/sum-left-builtin/100 115.1 μs 96.85 μs -15.9%
sum/hand-written-PLC/sum-left-builtin/500 569.1 μs 476.7 μs -16.2%
sum/hand-written-PLC/sum-left-builtin/1000 1.135 ms 949.7 μs -16.3%
sum/hand-written-PLC/sum-left-builtin/5000 5.665 ms 4.701 ms -17.0%
sum/hand-written-PLC/sum-left-builtin/10000 11.24 ms 9.424 ms -16.2%
sum/hand-written-PLC/sum-left-Scott/10 8.890 μs 8.836 μs -0.6%
sum/hand-written-PLC/sum-left-Scott/50 39.90 μs 39.05 μs -2.1%
sum/hand-written-PLC/sum-left-Scott/100 78.83 μs 77.47 μs -1.7%
sum/hand-written-PLC/sum-left-Scott/500 395.1 μs 388.0 μs -1.8%
sum/hand-written-PLC/sum-left-Scott/1000 795.8 μs 783.2 μs -1.6%
sum/hand-written-PLC/sum-left-Scott/5000 4.603 ms 4.528 ms -1.6%
sum/hand-written-PLC/sum-left-Scott/10000 9.482 ms 9.340 ms -1.5%

github-actions[bot] avatar Nov 13 '23 16:11 github-actions[bot]

@michaelpj seems like I forgot to hit "comment" last time I wrote a response to your latest comment. Here's another attempt.

Is the "real" answer here that we can return any term that introduces no new variable binders? e.g. introducing force/delay/constr all also seem fine, because it's adding new binders that really throws us off (because then we'd need to shift any binders in the input terms depending on where we put them, etc.

Yeah, I guess, although we don't seem to need force or delay. Yet anyway.

Although we could allow constructing arbitrary terms as long as it's impossible to embed values supplied as arguments into them, so that there's no chance of mixing up original and created-by-the-builtin variables, but I'm not even sure what we could use that for, so probably not worth discussing it.

Although even then... can I do this?

\h a -> h 1 a

Yep, the machinery implemented in this PR is enough for that, just checked:

this :: Opaque val (Integer -> a -> b) -> Opaque val a -> Opaque (HeadSpine val) b
this h (Opaque a) = headSpine h [fromValue (1 :: Integer), a]

or this?

\h a -> h (addInteger 1 2) a

Not with the machinery implemented in this PR (neither nested application nor builtin calls are supported within the denotation of a builtin), but we can add support for those later if we want to.

effectfully avatar Nov 15 '23 10:11 effectfully

/benchmark plutus-benchmark:lists

effectfully avatar Jan 08 '24 22:01 effectfully

Click here to check the status of your benchmark.

github-actions[bot] avatar Jan 08 '24 22:01 github-actions[bot]

Comparing benchmark results of 'plutus-benchmark:lists' on 'cc5447d08' (base) and 'fe81335cd' (PR)

Results table
Script cc5447d fe81335 Change
sort/ghcSort/10 37.12 μs 38.61 μs +4.0%
sort/ghcSort/20 86.62 μs 89.26 μs +3.0%
sort/ghcSort/30 133.2 μs 137.3 μs +3.1%
sort/ghcSort/40 196.3 μs 200.3 μs +2.0%
sort/ghcSort/50 235.5 μs 246.8 μs +4.8%
sort/ghcSort/60 303.3 μs 311.4 μs +2.7%
sort/ghcSort/70 390.1 μs 404.9 μs +3.8%
sort/ghcSort/80 445.1 μs 457.1 μs +2.7%
sort/ghcSort/90 493.4 μs 504.2 μs +2.2%
sort/ghcSort/100 555.6 μs 568.3 μs +2.3%
sort/ghcSort/110 609.3 μs 622.2 μs +2.1%
sort/ghcSort/120 693.5 μs 709.9 μs +2.4%
sort/ghcSort/130 849.7 μs 868.9 μs +2.3%
sort/ghcSort/140 901.7 μs 924.2 μs +2.5%
sort/ghcSort/150 963.0 μs 988.9 μs +2.7%
sort/ghcSort/160 1.030 ms 1.053 ms +2.2%
sort/ghcSort/170 1.087 ms 1.120 ms +3.0%
sort/ghcSort/180 1.149 ms 1.171 ms +1.9%
sort/ghcSort/190 1.217 ms 1.248 ms +2.5%
sort/ghcSort/200 1.312 ms 1.338 ms +2.0%
sort/ghcSort/210 1.367 ms 1.395 ms +2.0%
sort/ghcSort/220 1.425 ms 1.464 ms +2.7%
sort/ghcSort/230 1.520 ms 1.564 ms +2.9%
sort/ghcSort/240 1.610 ms 1.659 ms +3.0%
sort/ghcSort/250 1.701 ms 1.734 ms +1.9%
sort/ghcSort/260 1.953 ms 2.000 ms +2.4%
sort/ghcSort/270 1.990 ms 2.056 ms +3.3%
sort/ghcSort/280 2.077 ms 2.115 ms +1.8%
sort/ghcSort/290 2.126 ms 2.192 ms +3.1%
sort/ghcSort/300 2.210 ms 2.269 ms +2.7%
sort/ghcSort/310 2.288 ms 2.339 ms +2.2%
sort/ghcSort/320 2.362 ms 2.425 ms +2.7%
sort/ghcSort/330 2.432 ms 2.496 ms +2.6%
sort/ghcSort/340 2.514 ms 2.559 ms +1.8%
sort/ghcSort/350 2.572 ms 2.625 ms +2.1%
sort/ghcSort/360 2.643 ms 2.703 ms +2.3%
sort/ghcSort/370 2.709 ms 2.779 ms +2.6%
sort/ghcSort/380 2.800 ms 2.861 ms +2.2%
sort/ghcSort/390 2.929 ms 2.998 ms +2.4%
sort/ghcSort/400 3.003 ms 3.071 ms +2.3%
sort/ghcSort/410 3.036 ms 3.126 ms +3.0%
sort/ghcSort/420 3.135 ms 3.206 ms +2.3%
sort/ghcSort/430 3.198 ms 3.275 ms +2.4%
sort/ghcSort/440 3.270 ms 3.364 ms +2.9%
sort/ghcSort/450 3.467 ms 3.538 ms +2.0%
sort/ghcSort/460 3.493 ms 3.597 ms +3.0%
sort/ghcSort/470 3.608 ms 3.681 ms +2.0%
sort/ghcSort/480 3.728 ms 3.811 ms +2.2%
sort/ghcSort/490 3.789 ms 3.888 ms +2.6%
sort/ghcSort/500 3.907 ms 4.004 ms +2.5%
sort/insertionSort/10 34.13 μs 35.26 μs +3.3%
sort/insertionSort/20 124.1 μs 126.6 μs +2.0%
sort/insertionSort/30 268.3 μs 275.5 μs +2.7%
sort/insertionSort/40 474.1 μs 481.5 μs +1.6%
sort/insertionSort/50 733.2 μs 748.1 μs +2.0%
sort/insertionSort/60 1.059 ms 1.075 ms +1.5%
sort/insertionSort/70 1.434 ms 1.456 ms +1.5%
sort/insertionSort/80 1.866 ms 1.898 ms +1.7%
sort/insertionSort/90 2.358 ms 2.403 ms +1.9%
sort/insertionSort/100 2.911 ms 2.956 ms +1.5%
sort/insertionSort/110 3.524 ms 3.560 ms +1.0%
sort/insertionSort/120 4.194 ms 4.238 ms +1.0%
sort/insertionSort/130 5.092 ms 4.995 ms -1.9%
sort/insertionSort/140 5.680 ms 5.771 ms +1.6%
sort/insertionSort/150 6.543 ms 6.609 ms +1.0%
sort/insertionSort/160 7.441 ms 7.544 ms +1.4%
sort/insertionSort/170 8.427 ms 8.531 ms +1.2%
sort/insertionSort/180 9.387 ms 9.549 ms +1.7%
sort/insertionSort/190 10.45 ms 10.67 ms +2.1%
sort/insertionSort/200 11.60 ms 11.79 ms +1.6%
sort/insertionSort/210 12.77 ms 13.02 ms +2.0%
sort/insertionSort/220 14.07 ms 14.29 ms +1.6%
sort/insertionSort/230 15.35 ms 15.66 ms +2.0%
sort/insertionSort/240 16.82 ms 17.07 ms +1.5%
sort/insertionSort/250 18.15 ms 18.50 ms +1.9%
sort/insertionSort/260 20.58 ms 20.00 ms -2.8%
sort/insertionSort/270 21.41 ms 21.67 ms +1.2%
sort/insertionSort/280 22.98 ms 23.24 ms +1.1%
sort/insertionSort/290 24.75 ms 25.06 ms +1.3%
sort/insertionSort/300 26.44 ms 26.79 ms +1.3%
sort/insertionSort/310 28.24 ms 28.73 ms +1.7%
sort/insertionSort/320 30.00 ms 30.54 ms +1.8%
sort/insertionSort/330 31.98 ms 32.49 ms +1.6%
sort/insertionSort/340 33.94 ms 34.52 ms +1.7%
sort/insertionSort/350 36.01 ms 36.62 ms +1.7%
sort/insertionSort/360 38.27 ms 38.80 ms +1.4%
sort/insertionSort/370 40.50 ms 40.94 ms +1.1%
sort/insertionSort/380 42.68 ms 43.25 ms +1.3%
sort/insertionSort/390 44.86 ms 45.63 ms +1.7%
sort/insertionSort/400 47.33 ms 48.09 ms +1.6%
sort/insertionSort/410 49.80 ms 50.63 ms +1.7%
sort/insertionSort/420 52.04 ms 52.95 ms +1.7%
sort/insertionSort/430 55.14 ms 55.74 ms +1.1%
sort/insertionSort/440 57.51 ms 58.53 ms +1.8%
sort/insertionSort/450 60.45 ms 61.25 ms +1.3%
sort/insertionSort/460 63.01 ms 63.71 ms +1.1%
sort/insertionSort/470 65.79 ms 66.83 ms +1.6%
sort/insertionSort/480 68.84 ms 69.67 ms +1.2%
sort/insertionSort/490 71.74 ms 72.93 ms +1.7%
sort/insertionSort/500 74.33 ms 75.99 ms +2.2%
sort/mergeSort/10 88.25 μs 92.82 μs +5.2%
sort/mergeSort/20 214.6 μs 223.8 μs +4.3%
sort/mergeSort/30 353.0 μs 369.4 μs +4.6%
sort/mergeSort/40 501.1 μs 520.4 μs +3.9%
sort/mergeSort/50 651.0 μs 683.3 μs +5.0%
sort/mergeSort/60 822.5 μs 856.2 μs +4.1%
sort/mergeSort/70 985.1 μs 1.026 ms +4.2%
sort/mergeSort/80 1.160 ms 1.210 ms +4.3%
sort/mergeSort/90 1.336 ms 1.389 ms +4.0%
sort/mergeSort/100 1.509 ms 1.571 ms +4.1%
sort/mergeSort/110 1.691 ms 1.756 ms +3.8%
sort/mergeSort/120 1.879 ms 1.959 ms +4.3%
sort/mergeSort/130 2.102 ms 2.173 ms +3.4%
sort/mergeSort/140 2.259 ms 2.350 ms +4.0%
sort/mergeSort/150 2.426 ms 2.524 ms +4.0%
sort/mergeSort/160 2.630 ms 2.739 ms +4.1%
sort/mergeSort/170 2.819 ms 2.925 ms +3.8%
sort/mergeSort/180 3.012 ms 3.140 ms +4.2%
sort/mergeSort/190 3.218 ms 3.346 ms +4.0%
sort/mergeSort/200 3.399 ms 3.534 ms +4.0%
sort/mergeSort/210 3.648 ms 3.758 ms +3.0%
sort/mergeSort/220 3.790 ms 3.955 ms +4.4%
sort/mergeSort/230 4.007 ms 4.175 ms +4.2%
sort/mergeSort/240 4.223 ms 4.387 ms +3.9%
sort/mergeSort/250 4.447 ms 4.632 ms +4.2%
sort/mergeSort/260 4.688 ms 4.869 ms +3.9%
sort/mergeSort/270 4.838 ms 5.034 ms +4.1%
sort/mergeSort/280 5.035 ms 5.247 ms +4.2%
sort/mergeSort/290 5.222 ms 5.436 ms +4.1%
sort/mergeSort/300 5.426 ms 5.646 ms +4.1%
sort/mergeSort/310 5.786 ms 5.859 ms +1.3%
sort/mergeSort/320 5.886 ms 6.123 ms +4.0%
sort/mergeSort/330 6.072 ms 6.309 ms +3.9%
sort/mergeSort/340 6.287 ms 6.529 ms +3.8%
sort/mergeSort/350 6.525 ms 6.746 ms +3.4%
sort/mergeSort/360 6.724 ms 6.997 ms +4.1%
sort/mergeSort/370 6.945 ms 7.241 ms +4.3%
sort/mergeSort/380 7.387 ms 7.450 ms +0.9%
sort/mergeSort/390 7.391 ms 7.674 ms +3.8%
sort/mergeSort/400 7.570 ms 7.873 ms +4.0%
sort/mergeSort/410 7.828 ms 8.130 ms +3.9%
sort/mergeSort/420 8.049 ms 8.358 ms +3.8%
sort/mergeSort/430 8.303 ms 8.602 ms +3.6%
sort/mergeSort/440 8.450 ms 8.783 ms +3.9%
sort/mergeSort/450 8.686 ms 9.016 ms +3.8%
sort/mergeSort/460 8.924 ms 9.271 ms +3.9%
sort/mergeSort/470 9.178 ms 9.517 ms +3.7%
sort/mergeSort/480 9.400 ms 9.760 ms +3.8%
sort/mergeSort/490 9.631 ms 10.01 ms +3.9%
sort/mergeSort/500 9.862 ms 10.28 ms +4.2%
sort/quickSort/10 81.01 μs 81.32 μs +0.4%
sort/quickSort/20 298.3 μs 302.5 μs +1.4%
sort/quickSort/30 654.8 μs 664.7 μs +1.5%
sort/quickSort/40 1.169 ms 1.187 ms +1.5%
sort/quickSort/50 1.836 ms 1.865 ms +1.6%
sort/quickSort/60 2.645 ms 2.677 ms +1.2%
sort/quickSort/70 3.613 ms 3.673 ms +1.7%
sort/quickSort/80 4.732 ms 4.788 ms +1.2%
sort/quickSort/90 6.013 ms 6.101 ms +1.5%
sort/quickSort/100 7.320 ms 7.437 ms +1.6%
sort/quickSort/110 8.925 ms 9.034 ms +1.2%
sort/quickSort/120 10.58 ms 10.76 ms +1.7%
sort/quickSort/130 12.43 ms 12.60 ms +1.4%
sort/quickSort/140 14.28 ms 14.47 ms +1.3%
sort/quickSort/150 16.47 ms 16.70 ms +1.4%
sort/quickSort/160 18.67 ms 18.97 ms +1.6%
sort/quickSort/170 21.02 ms 21.33 ms +1.5%
sort/quickSort/180 23.61 ms 23.96 ms +1.5%
sort/quickSort/190 26.33 ms 26.64 ms +1.2%
sort/quickSort/200 29.07 ms 29.46 ms +1.3%
sort/quickSort/210 31.99 ms 32.45 ms +1.4%
sort/quickSort/220 35.22 ms 35.77 ms +1.6%
sort/quickSort/230 38.49 ms 38.93 ms +1.1%
sort/quickSort/240 41.94 ms 42.41 ms +1.1%
sort/quickSort/250 45.40 ms 45.91 ms +1.1%
sort/quickSort/260 49.10 ms 49.71 ms +1.2%
sort/quickSort/270 52.97 ms 53.72 ms +1.4%
sort/quickSort/280 57.08 ms 57.62 ms +0.9%
sort/quickSort/290 61.12 ms 62.01 ms +1.5%
sort/quickSort/300 65.35 ms 66.17 ms +1.3%
sort/quickSort/310 69.98 ms 70.72 ms +1.1%
sort/quickSort/320 74.56 ms 75.34 ms +1.0%
sort/quickSort/330 79.13 ms 80.51 ms +1.7%
sort/quickSort/340 84.33 ms 85.64 ms +1.6%
sort/quickSort/350 89.23 ms 90.71 ms +1.7%
sort/quickSort/360 94.29 ms 95.87 ms +1.7%
sort/quickSort/370 99.76 ms 101.3 ms +1.5%
sort/quickSort/380 105.3 ms 107.0 ms +1.6%
sort/quickSort/390 111.0 ms 112.9 ms +1.7%
sort/quickSort/400 116.7 ms 119.0 ms +2.0%
sort/quickSort/410 123.0 ms 124.5 ms +1.2%
sort/quickSort/420 129.5 ms 131.1 ms +1.2%
sort/quickSort/430 135.8 ms 137.4 ms +1.2%
sort/quickSort/440 141.9 ms 144.7 ms +2.0%
sort/quickSort/450 148.9 ms 151.1 ms +1.5%
sort/quickSort/460 155.6 ms 157.6 ms +1.3%
sort/quickSort/470 162.7 ms 165.5 ms +1.7%
sort/quickSort/480 170.9 ms 172.3 ms +0.8%
sort/quickSort/490 177.1 ms 180.2 ms +1.8%
sort/quickSort/500 184.2 ms 187.5 ms +1.8%
sum/compiled-from-Haskell/sum-right-builtin/10 8.380 μs 7.157 μs -14.6%
sum/compiled-from-Haskell/sum-right-builtin/50 39.37 μs 33.12 μs -15.9%
sum/compiled-from-Haskell/sum-right-builtin/100 78.86 μs 66.89 μs -15.2%
sum/compiled-from-Haskell/sum-right-builtin/500 431.2 μs 361.9 μs -16.1%
sum/compiled-from-Haskell/sum-right-builtin/1000 951.4 μs 796.3 μs -16.3%
sum/compiled-from-Haskell/sum-right-builtin/5000 6.704 ms 5.980 ms -10.8%
sum/compiled-from-Haskell/sum-right-builtin/10000 14.93 ms 13.90 ms -6.9%
sum/compiled-from-Haskell/sum-right-Scott/10 6.772 μs 7.115 μs +5.1%
sum/compiled-from-Haskell/sum-right-Scott/50 31.24 μs 33.12 μs +6.0%
sum/compiled-from-Haskell/sum-right-Scott/100 62.53 μs 66.75 μs +6.7%
sum/compiled-from-Haskell/sum-right-Scott/500 336.2 μs 356.7 μs +6.1%
sum/compiled-from-Haskell/sum-right-Scott/1000 737.3 μs 782.0 μs +6.1%
sum/compiled-from-Haskell/sum-right-Scott/5000 5.671 ms 5.979 ms +5.4%
sum/compiled-from-Haskell/sum-right-Scott/10000 13.97 ms 14.37 ms +2.9%
sum/compiled-from-Haskell/sum-right-data/10 20.35 μs 17.36 μs -14.7%
sum/compiled-from-Haskell/sum-right-data/50 97.62 μs 83.37 μs -14.6%
sum/compiled-from-Haskell/sum-right-data/100 195.6 μs 167.4 μs -14.4%
sum/compiled-from-Haskell/sum-right-data/500 1.108 ms 911.8 μs -17.7%
sum/compiled-from-Haskell/sum-right-data/1000 2.589 ms 2.099 ms -18.9%
sum/compiled-from-Haskell/sum-right-data/5000 15.00 ms 12.19 ms -18.7%
sum/compiled-from-Haskell/sum-right-data/10000 31.66 ms 25.59 ms -19.2%
sum/compiled-from-Haskell/sum-left-builtin/10 8.053 μs 6.927 μs -14.0%
sum/compiled-from-Haskell/sum-left-builtin/50 38.60 μs 32.50 μs -15.8%
sum/compiled-from-Haskell/sum-left-builtin/100 76.53 μs 64.19 μs -16.1%
sum/compiled-from-Haskell/sum-left-builtin/500 412.5 μs 343.8 μs -16.7%
sum/compiled-from-Haskell/sum-left-builtin/1000 917.2 μs 756.3 μs -17.5%
sum/compiled-from-Haskell/sum-left-builtin/5000 6.567 ms 5.825 ms -11.3%
sum/compiled-from-Haskell/sum-left-builtin/10000 14.32 ms 13.14 ms -8.2%
sum/compiled-from-Haskell/sum-left-Scott/10 6.510 μs 6.989 μs +7.4%
sum/compiled-from-Haskell/sum-left-Scott/50 30.34 μs 32.26 μs +6.3%
sum/compiled-from-Haskell/sum-left-Scott/100 61.19 μs 64.18 μs +4.9%
sum/compiled-from-Haskell/sum-left-Scott/500 322.7 μs 339.2 μs +5.1%
sum/compiled-from-Haskell/sum-left-Scott/1000 705.4 μs 742.7 μs +5.3%
sum/compiled-from-Haskell/sum-left-Scott/5000 5.764 ms 5.893 ms +2.2%
sum/compiled-from-Haskell/sum-left-Scott/10000 13.06 ms 13.33 ms +2.1%
sum/compiled-from-Haskell/sum-left-data/10 21.18 μs 17.44 μs -17.7%
sum/compiled-from-Haskell/sum-left-data/50 101.6 μs 83.84 μs -17.5%
sum/compiled-from-Haskell/sum-left-data/100 202.0 μs 166.7 μs -17.5%
sum/compiled-from-Haskell/sum-left-data/500 1.141 ms 892.8 μs -21.8%
sum/compiled-from-Haskell/sum-left-data/1000 2.640 ms 2.032 ms -23.0%
sum/compiled-from-Haskell/sum-left-data/5000 15.19 ms 11.70 ms -23.0%
sum/compiled-from-Haskell/sum-left-data/10000 31.55 ms 24.40 ms -22.7%
sum/hand-written-PLC/sum-right-builtin/10 8.367 μs 7.304 μs -12.7%
sum/hand-written-PLC/sum-right-builtin/50 37.27 μs 33.66 μs -9.7%
sum/hand-written-PLC/sum-right-builtin/100 73.83 μs 66.52 μs -9.9%
sum/hand-written-PLC/sum-right-builtin/500 374.4 μs 339.8 μs -9.2%
sum/hand-written-PLC/sum-right-builtin/1000 783.2 μs 699.4 μs -10.7%
sum/hand-written-PLC/sum-right-builtin/5000 4.662 ms 4.239 ms -9.1%
sum/hand-written-PLC/sum-right-builtin/10000 9.594 ms 8.804 ms -8.2%
sum/hand-written-PLC/sum-right-Scott/10 5.534 μs 5.994 μs +8.3%
sum/hand-written-PLC/sum-right-Scott/50 24.69 μs 26.33 μs +6.6%
sum/hand-written-PLC/sum-right-Scott/100 47.39 μs 50.55 μs +6.7%
sum/hand-written-PLC/sum-right-Scott/500 245.8 μs 261.0 μs +6.2%
sum/hand-written-PLC/sum-right-Scott/1000 510.7 μs 546.4 μs +7.0%
sum/hand-written-PLC/sum-right-Scott/5000 3.630 ms 3.819 ms +5.2%
sum/hand-written-PLC/sum-right-Scott/10000 8.051 ms 8.511 ms +5.7%
sum/hand-written-PLC/sum-left-builtin/10 8.618 μs 8.303 μs -3.7%
sum/hand-written-PLC/sum-left-builtin/50 39.33 μs 36.28 μs -7.8%
sum/hand-written-PLC/sum-left-builtin/100 78.44 μs 71.55 μs -8.8%
sum/hand-written-PLC/sum-left-builtin/500 377.5 μs 349.4 μs -7.4%
sum/hand-written-PLC/sum-left-builtin/1000 748.2 μs 692.9 μs -7.4%
sum/hand-written-PLC/sum-left-builtin/5000 3.704 ms 3.429 ms -7.4%
sum/hand-written-PLC/sum-left-builtin/10000 7.372 ms 6.820 ms -7.5%
sum/hand-written-PLC/sum-left-Scott/10 5.686 μs 6.003 μs +5.6%
sum/hand-written-PLC/sum-left-Scott/50 26.03 μs 27.60 μs +6.0%
sum/hand-written-PLC/sum-left-Scott/100 51.64 μs 54.82 μs +6.2%
sum/hand-written-PLC/sum-left-Scott/500 260.3 μs 277.1 μs +6.5%
sum/hand-written-PLC/sum-left-Scott/1000 528.3 μs 565.5 μs +7.0%
sum/hand-written-PLC/sum-left-Scott/5000 3.246 ms 3.417 ms +5.3%
sum/hand-written-PLC/sum-left-Scott/10000 6.705 ms 7.061 ms +5.3%

github-actions[bot] avatar Jan 09 '24 00:01 github-actions[bot]

/benchmark plutus-benchmark:lists

effectfully avatar Jan 09 '24 00:01 effectfully

Click here to check the status of your benchmark.

github-actions[bot] avatar Jan 09 '24 00:01 github-actions[bot]

Comparing benchmark results of 'plutus-benchmark:lists' on 'cc5447d08' (base) and 'fe81335cd' (PR)

Results table
Script cc5447d fe81335 Change
sort/ghcSort/10 36.24 μs 39.15 μs +8.0%
sort/ghcSort/20 84.79 μs 90.76 μs +7.0%
sort/ghcSort/30 129.5 μs 140.4 μs +8.4%
sort/ghcSort/40 192.1 μs 203.5 μs +5.9%
sort/ghcSort/50 233.2 μs 252.2 μs +8.1%
sort/ghcSort/60 297.0 μs 317.1 μs +6.8%
sort/ghcSort/70 382.5 μs 411.8 μs +7.7%
sort/ghcSort/80 435.6 μs 467.8 μs +7.4%
sort/ghcSort/90 481.0 μs 516.4 μs +7.4%
sort/ghcSort/100 551.1 μs 580.1 μs +5.3%
sort/ghcSort/110 597.8 μs 635.9 μs +6.4%
sort/ghcSort/120 679.6 μs 724.3 μs +6.6%
sort/ghcSort/130 831.2 μs 887.8 μs +6.8%
sort/ghcSort/140 883.0 μs 939.1 μs +6.4%
sort/ghcSort/150 941.3 μs 1.008 ms +7.1%
sort/ghcSort/160 1.005 ms 1.071 ms +6.6%
sort/ghcSort/170 1.059 ms 1.139 ms +7.6%
sort/ghcSort/180 1.121 ms 1.190 ms +6.2%
sort/ghcSort/190 1.188 ms 1.266 ms +6.6%
sort/ghcSort/200 1.278 ms 1.359 ms +6.3%
sort/ghcSort/210 1.336 ms 1.420 ms +6.3%
sort/ghcSort/220 1.397 ms 1.484 ms +6.2%
sort/ghcSort/230 1.491 ms 1.587 ms +6.4%
sort/ghcSort/240 1.582 ms 1.681 ms +6.3%
sort/ghcSort/250 1.662 ms 1.763 ms +6.1%
sort/ghcSort/260 1.904 ms 2.034 ms +6.8%
sort/ghcSort/270 1.953 ms 2.088 ms +6.9%
sort/ghcSort/280 2.035 ms 2.149 ms +5.6%
sort/ghcSort/290 2.095 ms 2.228 ms +6.3%
sort/ghcSort/300 2.196 ms 2.308 ms +5.1%
sort/ghcSort/310 2.243 ms 2.393 ms +6.7%
sort/ghcSort/320 2.319 ms 2.462 ms +6.2%
sort/ghcSort/330 2.379 ms 2.548 ms +7.1%
sort/ghcSort/340 2.514 ms 2.607 ms +3.7%
sort/ghcSort/350 2.508 ms 2.664 ms +6.2%
sort/ghcSort/360 2.638 ms 2.742 ms +3.9%
sort/ghcSort/370 2.651 ms 2.821 ms +6.4%
sort/ghcSort/380 2.783 ms 2.912 ms +4.6%
sort/ghcSort/390 2.869 ms 3.044 ms +6.1%
sort/ghcSort/400 2.984 ms 3.114 ms +4.4%
sort/ghcSort/410 2.968 ms 3.160 ms +6.5%
sort/ghcSort/420 3.080 ms 3.269 ms +6.1%
sort/ghcSort/430 3.122 ms 3.333 ms +6.8%
sort/ghcSort/440 3.223 ms 3.418 ms +6.1%
sort/ghcSort/450 3.385 ms 3.595 ms +6.2%
sort/ghcSort/460 3.444 ms 3.642 ms +5.7%
sort/ghcSort/470 3.521 ms 3.740 ms +6.2%
sort/ghcSort/480 3.643 ms 3.873 ms +6.3%
sort/ghcSort/490 3.724 ms 3.952 ms +6.1%
sort/ghcSort/500 3.823 ms 4.062 ms +6.3%
sort/insertionSort/10 33.69 μs 35.79 μs +6.2%
sort/insertionSort/20 121.6 μs 129.0 μs +6.1%
sort/insertionSort/30 264.1 μs 280.2 μs +6.1%
sort/insertionSort/40 463.0 μs 489.7 μs +5.8%
sort/insertionSort/50 718.4 μs 762.4 μs +6.1%
sort/insertionSort/60 1.032 ms 1.094 ms +6.0%
sort/insertionSort/70 1.403 ms 1.490 ms +6.2%
sort/insertionSort/80 1.820 ms 1.939 ms +6.5%
sort/insertionSort/90 2.293 ms 2.443 ms +6.5%
sort/insertionSort/100 2.840 ms 3.006 ms +5.8%
sort/insertionSort/110 3.556 ms 3.628 ms +2.0%
sort/insertionSort/120 4.083 ms 4.326 ms +6.0%
sort/insertionSort/130 4.784 ms 5.078 ms +6.1%
sort/insertionSort/140 5.554 ms 5.889 ms +6.0%
sort/insertionSort/150 6.350 ms 6.739 ms +6.1%
sort/insertionSort/160 7.255 ms 7.683 ms +5.9%
sort/insertionSort/170 8.194 ms 8.656 ms +5.6%
sort/insertionSort/180 9.130 ms 9.758 ms +6.9%
sort/insertionSort/190 10.25 ms 10.88 ms +6.1%
sort/insertionSort/200 11.37 ms 12.05 ms +6.0%
sort/insertionSort/210 12.44 ms 13.27 ms +6.7%
sort/insertionSort/220 13.98 ms 14.61 ms +4.5%
sort/insertionSort/230 15.04 ms 15.98 ms +6.3%
sort/insertionSort/240 16.35 ms 17.42 ms +6.5%
sort/insertionSort/250 17.72 ms 18.89 ms +6.6%
sort/insertionSort/260 19.15 ms 20.52 ms +7.2%
sort/insertionSort/270 21.64 ms 22.02 ms +1.8%
sort/insertionSort/280 22.26 ms 23.69 ms +6.4%
sort/insertionSort/290 24.12 ms 25.42 ms +5.4%
sort/insertionSort/300 25.79 ms 27.23 ms +5.6%
sort/insertionSort/310 27.52 ms 29.08 ms +5.7%
sort/insertionSort/320 29.17 ms 31.06 ms +6.5%
sort/insertionSort/330 31.20 ms 33.12 ms +6.2%
sort/insertionSort/340 33.18 ms 35.10 ms +5.8%
sort/insertionSort/350 35.19 ms 37.38 ms +6.2%
sort/insertionSort/360 38.38 ms 39.53 ms +3.0%
sort/insertionSort/370 39.39 ms 41.84 ms +6.2%
sort/insertionSort/380 41.52 ms 44.13 ms +6.3%
sort/insertionSort/390 43.66 ms 46.42 ms +6.3%
sort/insertionSort/400 46.23 ms 48.78 ms +5.5%
sort/insertionSort/410 50.75 ms 51.37 ms +1.2%
sort/insertionSort/420 53.15 ms 54.06 ms +1.7%
sort/insertionSort/430 53.49 ms 56.73 ms +6.1%
sort/insertionSort/440 55.98 ms 59.48 ms +6.3%
sort/insertionSort/450 61.09 ms 62.23 ms +1.9%
sort/insertionSort/460 61.65 ms 64.95 ms +5.4%
sort/insertionSort/470 64.41 ms 67.91 ms +5.4%
sort/insertionSort/480 66.91 ms 70.90 ms +6.0%
sort/insertionSort/490 70.29 ms 73.87 ms +5.1%
sort/insertionSort/500 75.99 ms 77.18 ms +1.6%
sort/mergeSort/10 86.98 μs 94.29 μs +8.4%
sort/mergeSort/20 211.1 μs 227.5 μs +7.8%
sort/mergeSort/30 346.7 μs 375.5 μs +8.3%
sort/mergeSort/40 492.7 μs 530.8 μs +7.7%
sort/mergeSort/50 639.9 μs 694.7 μs +8.6%
sort/mergeSort/60 807.9 μs 871.1 μs +7.8%
sort/mergeSort/70 971.2 μs 1.044 ms +7.5%
sort/mergeSort/80 1.142 ms 1.231 ms +7.8%
sort/mergeSort/90 1.313 ms 1.415 ms +7.8%
sort/mergeSort/100 1.485 ms 1.601 ms +7.8%
sort/mergeSort/110 1.665 ms 1.790 ms +7.5%
sort/mergeSort/120 1.899 ms 1.992 ms +4.9%
sort/mergeSort/130 2.058 ms 2.216 ms +7.7%
sort/mergeSort/140 2.213 ms 2.392 ms +8.1%
sort/mergeSort/150 2.386 ms 2.566 ms +7.5%
sort/mergeSort/160 2.663 ms 2.785 ms +4.6%
sort/mergeSort/170 2.770 ms 2.978 ms +7.5%
sort/mergeSort/180 2.960 ms 3.190 ms +7.8%
sort/mergeSort/190 3.165 ms 3.405 ms +7.6%
sort/mergeSort/200 3.343 ms 3.601 ms +7.7%
sort/mergeSort/210 3.650 ms 3.824 ms +4.8%
sort/mergeSort/220 3.718 ms 4.030 ms +8.4%
sort/mergeSort/230 3.948 ms 4.254 ms +7.8%
sort/mergeSort/240 4.147 ms 4.453 ms +7.4%
sort/mergeSort/250 4.379 ms 4.705 ms +7.4%
sort/mergeSort/260 4.712 ms 4.946 ms +5.0%
sort/mergeSort/270 4.759 ms 5.118 ms +7.5%
sort/mergeSort/280 4.965 ms 5.324 ms +7.2%
sort/mergeSort/290 5.137 ms 5.520 ms +7.5%
sort/mergeSort/300 5.343 ms 5.747 ms +7.6%
sort/mergeSort/310 5.682 ms 5.960 ms +4.9%
sort/mergeSort/320 5.776 ms 6.248 ms +8.2%
sort/mergeSort/330 5.958 ms 6.421 ms +7.8%
sort/mergeSort/340 6.184 ms 6.653 ms +7.6%
sort/mergeSort/350 6.398 ms 6.880 ms +7.5%
sort/mergeSort/360 6.599 ms 7.112 ms +7.8%
sort/mergeSort/370 6.826 ms 7.352 ms +7.7%
sort/mergeSort/380 7.224 ms 7.584 ms +5.0%
sort/mergeSort/390 7.255 ms 7.826 ms +7.9%
sort/mergeSort/400 7.438 ms 8.017 ms +7.8%
sort/mergeSort/410 7.666 ms 8.275 ms +7.9%
sort/mergeSort/420 8.143 ms 8.514 ms +4.6%
sort/mergeSort/430 8.147 ms 8.770 ms +7.6%
sort/mergeSort/440 8.326 ms 8.948 ms +7.5%
sort/mergeSort/450 8.536 ms 9.169 ms +7.4%
sort/mergeSort/460 8.752 ms 9.416 ms +7.6%
sort/mergeSort/470 9.033 ms 9.676 ms +7.1%
sort/mergeSort/480 9.232 ms 9.937 ms +7.6%
sort/mergeSort/490 9.460 ms 10.19 ms +7.7%
sort/mergeSort/500 10.02 ms 10.45 ms +4.3%
sort/quickSort/10 79.66 μs 82.57 μs +3.7%
sort/quickSort/20 291.7 μs 306.9 μs +5.2%
sort/quickSort/30 640.3 μs 674.1 μs +5.3%
sort/quickSort/40 1.146 ms 1.205 ms +5.1%
sort/quickSort/50 1.805 ms 1.894 ms +4.9%
sort/quickSort/60 2.594 ms 2.732 ms +5.3%
sort/quickSort/70 3.541 ms 3.729 ms +5.3%
sort/quickSort/80 4.624 ms 4.880 ms +5.5%
sort/quickSort/90 5.886 ms 6.167 ms +4.8%
sort/quickSort/100 7.182 ms 7.546 ms +5.1%
sort/quickSort/110 8.737 ms 9.145 ms +4.7%
sort/quickSort/120 10.62 ms 10.92 ms +2.8%
sort/quickSort/130 12.15 ms 12.79 ms +5.3%
sort/quickSort/140 13.96 ms 14.71 ms +5.4%
sort/quickSort/150 16.14 ms 17.00 ms +5.3%
sort/quickSort/160 18.31 ms 19.27 ms +5.2%
sort/quickSort/170 20.64 ms 21.74 ms +5.3%
sort/quickSort/180 23.13 ms 24.30 ms +5.1%
sort/quickSort/190 25.74 ms 26.95 ms +4.7%
sort/quickSort/200 28.48 ms 29.92 ms +5.1%
sort/quickSort/210 31.35 ms 32.97 ms +5.2%
sort/quickSort/220 34.59 ms 36.24 ms +4.8%
sort/quickSort/230 37.72 ms 39.50 ms +4.7%
sort/quickSort/240 41.21 ms 42.95 ms +4.2%
sort/quickSort/250 44.53 ms 46.53 ms +4.5%
sort/quickSort/260 48.08 ms 50.50 ms +5.0%
sort/quickSort/270 51.91 ms 54.51 ms +5.0%
sort/quickSort/280 55.82 ms 58.61 ms +5.0%
sort/quickSort/290 59.81 ms 62.77 ms +4.9%
sort/quickSort/300 64.01 ms 67.25 ms +5.1%
sort/quickSort/310 68.52 ms 71.86 ms +4.9%
sort/quickSort/320 72.99 ms 76.53 ms +4.8%
sort/quickSort/330 77.79 ms 81.35 ms +4.6%
sort/quickSort/340 82.72 ms 86.95 ms +5.1%
sort/quickSort/350 87.53 ms 92.12 ms +5.2%
sort/quickSort/360 92.47 ms 97.42 ms +5.4%
sort/quickSort/370 97.99 ms 102.7 ms +4.8%
sort/quickSort/380 103.6 ms 108.8 ms +5.0%
sort/quickSort/390 109.2 ms 114.3 ms +4.7%
sort/quickSort/400 115.0 ms 121.0 ms +5.2%
sort/quickSort/410 120.5 ms 126.1 ms +4.6%
sort/quickSort/420 126.9 ms 133.1 ms +4.9%
sort/quickSort/430 133.3 ms 139.8 ms +4.9%
sort/quickSort/440 139.1 ms 146.0 ms +5.0%
sort/quickSort/450 145.7 ms 153.1 ms +5.1%
sort/quickSort/460 153.1 ms 160.3 ms +4.7%
sort/quickSort/470 159.4 ms 167.4 ms +5.0%
sort/quickSort/480 167.0 ms 175.0 ms +4.8%
sort/quickSort/490 173.8 ms 182.6 ms +5.1%
sort/quickSort/500 180.8 ms 190.3 ms +5.3%
sum/compiled-from-Haskell/sum-right-builtin/10 8.310 μs 7.238 μs -12.9%
sum/compiled-from-Haskell/sum-right-builtin/50 39.04 μs 33.31 μs -14.7%
sum/compiled-from-Haskell/sum-right-builtin/100 78.34 μs 67.48 μs -13.9%
sum/compiled-from-Haskell/sum-right-builtin/500 426.2 μs 363.1 μs -14.8%
sum/compiled-from-Haskell/sum-right-builtin/1000 946.1 μs 801.6 μs -15.3%
sum/compiled-from-Haskell/sum-right-builtin/5000 6.646 ms 5.993 ms -9.8%
sum/compiled-from-Haskell/sum-right-builtin/10000 14.83 ms 13.93 ms -6.1%
sum/compiled-from-Haskell/sum-right-Scott/10 6.716 μs 7.147 μs +6.4%
sum/compiled-from-Haskell/sum-right-Scott/50 30.91 μs 33.30 μs +7.7%
sum/compiled-from-Haskell/sum-right-Scott/100 61.90 μs 67.32 μs +8.8%
sum/compiled-from-Haskell/sum-right-Scott/500 332.4 μs 359.9 μs +8.3%
sum/compiled-from-Haskell/sum-right-Scott/1000 730.5 μs 789.0 μs +8.0%
sum/compiled-from-Haskell/sum-right-Scott/5000 5.638 ms 6.008 ms +6.6%
sum/compiled-from-Haskell/sum-right-Scott/10000 13.90 ms 14.39 ms +3.5%
sum/compiled-from-Haskell/sum-right-data/10 20.08 μs 17.64 μs -12.2%
sum/compiled-from-Haskell/sum-right-data/50 96.47 μs 85.07 μs -11.8%
sum/compiled-from-Haskell/sum-right-data/100 193.4 μs 171.5 μs -11.3%
sum/compiled-from-Haskell/sum-right-data/500 1.099 ms 924.6 μs -15.9%
sum/compiled-from-Haskell/sum-right-data/1000 2.564 ms 2.121 ms -17.3%
sum/compiled-from-Haskell/sum-right-data/5000 14.89 ms 12.34 ms -17.1%
sum/compiled-from-Haskell/sum-right-data/10000 31.46 ms 25.96 ms -17.5%
sum/compiled-from-Haskell/sum-left-builtin/10 7.989 μs 6.971 μs -12.7%
sum/compiled-from-Haskell/sum-left-builtin/50 38.14 μs 32.56 μs -14.6%
sum/compiled-from-Haskell/sum-left-builtin/100 75.63 μs 64.63 μs -14.5%
sum/compiled-from-Haskell/sum-left-builtin/500 407.2 μs 345.9 μs -15.1%
sum/compiled-from-Haskell/sum-left-builtin/1000 909.3 μs 763.6 μs -16.0%
sum/compiled-from-Haskell/sum-left-builtin/5000 6.488 ms 5.851 ms -9.8%
sum/compiled-from-Haskell/sum-left-builtin/10000 14.21 ms 13.18 ms -7.2%
sum/compiled-from-Haskell/sum-left-Scott/10 6.433 μs 7.126 μs +10.8%
sum/compiled-from-Haskell/sum-left-Scott/50 29.89 μs 32.92 μs +10.1%
sum/compiled-from-Haskell/sum-left-Scott/100 60.49 μs 65.06 μs +7.6%
sum/compiled-from-Haskell/sum-left-Scott/500 319.0 μs 343.3 μs +7.6%
sum/compiled-from-Haskell/sum-left-Scott/1000 699.0 μs 748.9 μs +7.1%
sum/compiled-from-Haskell/sum-left-Scott/5000 5.703 ms 5.964 ms +4.6%
sum/compiled-from-Haskell/sum-left-Scott/10000 12.99 ms 13.42 ms +3.3%
sum/compiled-from-Haskell/sum-left-data/10 21.10 μs 17.68 μs -16.2%
sum/compiled-from-Haskell/sum-left-data/50 100.7 μs 85.22 μs -15.4%
sum/compiled-from-Haskell/sum-left-data/100 201.4 μs 168.4 μs -16.4%
sum/compiled-from-Haskell/sum-left-data/500 1.134 ms 910.5 μs -19.7%
sum/compiled-from-Haskell/sum-left-data/1000 2.627 ms 2.065 ms -21.4%
sum/compiled-from-Haskell/sum-left-data/5000 14.97 ms 11.82 ms -21.0%
sum/compiled-from-Haskell/sum-left-data/10000 31.37 ms 24.67 ms -21.4%
sum/hand-written-PLC/sum-right-builtin/10 8.304 μs 7.371 μs -11.2%
sum/hand-written-PLC/sum-right-builtin/50 36.89 μs 34.28 μs -7.1%
sum/hand-written-PLC/sum-right-builtin/100 73.13 μs 68.48 μs -6.4%
sum/hand-written-PLC/sum-right-builtin/500 372.7 μs 340.5 μs -8.6%
sum/hand-written-PLC/sum-right-builtin/1000 777.7 μs 705.2 μs -9.3%
sum/hand-written-PLC/sum-right-builtin/5000 4.607 ms 4.261 ms -7.5%
sum/hand-written-PLC/sum-right-builtin/10000 9.503 ms 8.860 ms -6.8%
sum/hand-written-PLC/sum-right-Scott/10 5.514 μs 6.014 μs +9.1%
sum/hand-written-PLC/sum-right-Scott/50 23.95 μs 26.43 μs +10.4%
sum/hand-written-PLC/sum-right-Scott/100 47.36 μs 50.65 μs +6.9%
sum/hand-written-PLC/sum-right-Scott/500 244.3 μs 262.4 μs +7.4%
sum/hand-written-PLC/sum-right-Scott/1000 507.6 μs 547.5 μs +7.9%
sum/hand-written-PLC/sum-right-Scott/5000 3.601 ms 3.839 ms +6.6%
sum/hand-written-PLC/sum-right-Scott/10000 8.023 ms 8.558 ms +6.7%
sum/hand-written-PLC/sum-left-builtin/10 8.562 μs 8.184 μs -4.4%
sum/hand-written-PLC/sum-left-builtin/50 39.40 μs 36.58 μs -7.2%
sum/hand-written-PLC/sum-left-builtin/100 77.38 μs 71.59 μs -7.5%
sum/hand-written-PLC/sum-left-builtin/500 375.6 μs 351.6 μs -6.4%
sum/hand-written-PLC/sum-left-builtin/1000 740.8 μs 696.9 μs -5.9%
sum/hand-written-PLC/sum-left-builtin/5000 3.662 ms 3.448 ms -5.8%
sum/hand-written-PLC/sum-left-builtin/10000 7.310 ms 6.863 ms -6.1%
sum/hand-written-PLC/sum-left-Scott/10 5.616 μs 6.028 μs +7.3%
sum/hand-written-PLC/sum-left-Scott/50 25.93 μs 27.63 μs +6.6%
sum/hand-written-PLC/sum-left-Scott/100 51.09 μs 55.82 μs +9.3%
sum/hand-written-PLC/sum-left-Scott/500 259.0 μs 277.5 μs +7.1%
sum/hand-written-PLC/sum-left-Scott/1000 525.8 μs 567.6 μs +7.9%
sum/hand-written-PLC/sum-left-Scott/5000 3.220 ms 3.436 ms +6.7%
sum/hand-written-PLC/sum-left-Scott/10000 6.704 ms 7.068 ms +5.4%

github-actions[bot] avatar Jan 09 '24 03:01 github-actions[bot]

/benchmark plutus-benchmark:lists

effectfully avatar Jan 09 '24 13:01 effectfully

/benchmark plutus-benchmark:lists

effectfully avatar Jan 09 '24 22:01 effectfully

Click here to check the status of your benchmark.

github-actions[bot] avatar Jan 09 '24 22:01 github-actions[bot]

Comparing benchmark results of 'plutus-benchmark:lists' on 'cc5447d08' (base) and 'fe81335cd' (PR)

Results table
Script cc5447d fe81335 Change
sort/ghcSort/10 38.13 μs 39.32 μs +3.1%
sort/ghcSort/20 89.11 μs 90.44 μs +1.5%
sort/ghcSort/30 136.3 μs 139.3 μs +2.2%
sort/ghcSort/40 201.5 μs 203.8 μs +1.1%
sort/ghcSort/50 244.4 μs 251.1 μs +2.7%
sort/ghcSort/60 311.2 μs 317.5 μs +2.0%
sort/ghcSort/70 403.3 μs 411.5 μs +2.0%
sort/ghcSort/80 458.4 μs 466.4 μs +1.7%
sort/ghcSort/90 516.3 μs 513.8 μs -0.5%
sort/ghcSort/100 571.3 μs 580.2 μs +1.6%
sort/ghcSort/110 627.6 μs 638.8 μs +1.8%
sort/ghcSort/120 713.6 μs 724.4 μs +1.5%
sort/ghcSort/130 875.4 μs 885.1 μs +1.1%
sort/ghcSort/140 928.4 μs 940.1 μs +1.3%
sort/ghcSort/150 993.3 μs 1.006 ms +1.3%
sort/ghcSort/160 1.062 ms 1.073 ms +1.0%
sort/ghcSort/170 1.119 ms 1.141 ms +2.0%
sort/ghcSort/180 1.180 ms 1.191 ms +0.9%
sort/ghcSort/190 1.250 ms 1.267 ms +1.4%
sort/ghcSort/200 1.345 ms 1.364 ms +1.4%
sort/ghcSort/210 1.403 ms 1.418 ms +1.1%
sort/ghcSort/220 1.464 ms 1.490 ms +1.8%
sort/ghcSort/230 1.563 ms 1.593 ms +1.9%
sort/ghcSort/240 1.655 ms 1.685 ms +1.8%
sort/ghcSort/250 1.749 ms 1.768 ms +1.1%
sort/ghcSort/260 2.006 ms 2.028 ms +1.1%
sort/ghcSort/270 2.062 ms 2.091 ms +1.4%
sort/ghcSort/280 2.130 ms 2.159 ms +1.4%
sort/ghcSort/290 2.195 ms 2.233 ms +1.7%
sort/ghcSort/300 2.269 ms 2.314 ms +2.0%
sort/ghcSort/310 2.359 ms 2.387 ms +1.2%
sort/ghcSort/320 2.422 ms 2.462 ms +1.7%
sort/ghcSort/330 2.498 ms 2.536 ms +1.5%
sort/ghcSort/340 2.605 ms 2.607 ms +0.1%
sort/ghcSort/350 2.639 ms 2.670 ms +1.2%
sort/ghcSort/360 2.706 ms 2.743 ms +1.4%
sort/ghcSort/370 2.782 ms 2.829 ms +1.7%
sort/ghcSort/380 2.886 ms 2.915 ms +1.0%
sort/ghcSort/390 3.006 ms 3.049 ms +1.4%
sort/ghcSort/400 3.077 ms 3.120 ms +1.4%
sort/ghcSort/410 3.121 ms 3.179 ms +1.9%
sort/ghcSort/420 3.231 ms 3.275 ms +1.4%
sort/ghcSort/430 3.278 ms 3.342 ms +2.0%
sort/ghcSort/440 3.371 ms 3.427 ms +1.7%
sort/ghcSort/450 3.565 ms 3.605 ms +1.1%
sort/ghcSort/460 3.605 ms 3.664 ms +1.6%
sort/ghcSort/470 3.696 ms 3.753 ms +1.5%
sort/ghcSort/480 3.821 ms 3.875 ms +1.4%
sort/ghcSort/490 3.905 ms 3.960 ms +1.4%
sort/ghcSort/500 4.012 ms 4.073 ms +1.5%
sort/insertionSort/10 35.51 μs 35.96 μs +1.3%
sort/insertionSort/20 128.2 μs 129.9 μs +1.3%
sort/insertionSort/30 280.8 μs 280.1 μs -0.2%
sort/insertionSort/40 492.0 μs 492.1 μs +0.0%
sort/insertionSort/50 761.6 μs 763.8 μs +0.3%
sort/insertionSort/60 1.130 ms 1.099 ms -2.7%
sort/insertionSort/70 1.486 ms 1.491 ms +0.3%
sort/insertionSort/80 1.934 ms 1.934 ms 0.0%
sort/insertionSort/90 2.446 ms 2.448 ms +0.1%
sort/insertionSort/100 3.133 ms 3.015 ms -3.8%
sort/insertionSort/110 3.650 ms 3.647 ms -0.1%
sort/insertionSort/120 4.493 ms 4.337 ms -3.5%
sort/insertionSort/130 5.071 ms 5.083 ms +0.2%
sort/insertionSort/140 5.905 ms 5.878 ms -0.5%
sort/insertionSort/150 6.746 ms 6.759 ms +0.2%
sort/insertionSort/160 7.676 ms 7.711 ms +0.5%
sort/insertionSort/170 8.692 ms 8.678 ms -0.2%
sort/insertionSort/180 9.787 ms 9.767 ms -0.2%
sort/insertionSort/190 11.24 ms 10.88 ms -3.2%
sort/insertionSort/200 12.04 ms 12.04 ms 0.0%
sort/insertionSort/210 13.35 ms 13.31 ms -0.3%
sort/insertionSort/220 15.14 ms 14.55 ms -3.9%
sort/insertionSort/230 15.98 ms 15.97 ms -0.1%
sort/insertionSort/240 17.38 ms 17.43 ms +0.3%
sort/insertionSort/250 18.85 ms 18.95 ms +0.5%
sort/insertionSort/260 20.43 ms 20.46 ms +0.1%
sort/insertionSort/270 21.96 ms 22.16 ms +0.9%
sort/insertionSort/280 23.52 ms 23.78 ms +1.1%
sort/insertionSort/290 25.29 ms 25.51 ms +0.9%
sort/insertionSort/300 27.10 ms 27.33 ms +0.8%
sort/insertionSort/310 29.31 ms 29.21 ms -0.3%
sort/insertionSort/320 31.01 ms 31.18 ms +0.5%
sort/insertionSort/330 34.19 ms 33.26 ms -2.7%
sort/insertionSort/340 35.27 ms 35.25 ms -0.1%
sort/insertionSort/350 37.32 ms 37.41 ms +0.2%
sort/insertionSort/360 39.57 ms 39.68 ms +0.3%
sort/insertionSort/370 41.77 ms 41.71 ms -0.1%
sort/insertionSort/380 44.17 ms 44.24 ms +0.2%
sort/insertionSort/390 46.47 ms 46.63 ms +0.3%
sort/insertionSort/400 49.04 ms 48.83 ms -0.4%
sort/insertionSort/410 51.00 ms 51.60 ms +1.2%
sort/insertionSort/420 53.89 ms 53.98 ms +0.2%
sort/insertionSort/430 56.17 ms 56.86 ms +1.2%
sort/insertionSort/440 60.96 ms 59.59 ms -2.2%
sort/insertionSort/450 62.18 ms 62.33 ms +0.2%
sort/insertionSort/460 65.23 ms 65.03 ms -0.3%
sort/insertionSort/470 67.47 ms 68.22 ms +1.1%
sort/insertionSort/480 70.19 ms 70.99 ms +1.1%
sort/insertionSort/490 74.01 ms 74.23 ms +0.3%
sort/insertionSort/500 77.00 ms 77.13 ms +0.2%
sort/mergeSort/10 90.73 μs 94.11 μs +3.7%
sort/mergeSort/20 220.7 μs 227.7 μs +3.2%
sort/mergeSort/30 363.6 μs 376.2 μs +3.5%
sort/mergeSort/40 514.2 μs 533.3 μs +3.7%
sort/mergeSort/50 672.4 μs 693.9 μs +3.2%
sort/mergeSort/60 847.5 μs 872.2 μs +2.9%
sort/mergeSort/70 1.014 ms 1.049 ms +3.5%
sort/mergeSort/80 1.224 ms 1.232 ms +0.7%
sort/mergeSort/90 1.380 ms 1.417 ms +2.7%
sort/mergeSort/100 1.549 ms 1.604 ms +3.6%
sort/mergeSort/110 1.743 ms 1.790 ms +2.7%
sort/mergeSort/120 1.935 ms 1.993 ms +3.0%
sort/mergeSort/130 2.161 ms 2.218 ms +2.6%
sort/mergeSort/140 2.312 ms 2.398 ms +3.7%
sort/mergeSort/150 2.506 ms 2.575 ms +2.8%
sort/mergeSort/160 2.723 ms 2.795 ms +2.6%
sort/mergeSort/170 2.905 ms 2.985 ms +2.8%
sort/mergeSort/180 3.108 ms 3.200 ms +3.0%
sort/mergeSort/190 3.392 ms 3.416 ms +0.7%
sort/mergeSort/200 3.513 ms 3.609 ms +2.7%
sort/mergeSort/210 3.743 ms 3.834 ms +2.4%
sort/mergeSort/220 3.913 ms 4.028 ms +2.9%
sort/mergeSort/230 4.137 ms 4.251 ms +2.8%
sort/mergeSort/240 4.353 ms 4.477 ms +2.8%
sort/mergeSort/250 4.595 ms 4.731 ms +3.0%
sort/mergeSort/260 4.823 ms 4.970 ms +3.0%
sort/mergeSort/270 4.979 ms 5.128 ms +3.0%
sort/mergeSort/280 5.198 ms 5.348 ms +2.9%
sort/mergeSort/290 5.399 ms 5.541 ms +2.6%
sort/mergeSort/300 5.608 ms 5.762 ms +2.7%
sort/mergeSort/310 5.808 ms 5.971 ms +2.8%
sort/mergeSort/320 6.066 ms 6.249 ms +3.0%
sort/mergeSort/330 6.234 ms 6.438 ms +3.3%
sort/mergeSort/340 6.473 ms 6.666 ms +3.0%
sort/mergeSort/350 6.704 ms 6.903 ms +3.0%
sort/mergeSort/360 6.902 ms 7.135 ms +3.4%
sort/mergeSort/370 7.166 ms 7.381 ms +3.0%
sort/mergeSort/380 7.335 ms 7.607 ms +3.7%
sort/mergeSort/390 7.774 ms 7.838 ms +0.8%
sort/mergeSort/400 7.799 ms 8.024 ms +2.9%
sort/mergeSort/410 8.051 ms 8.298 ms +3.1%
sort/mergeSort/420 8.355 ms 8.541 ms +2.2%
sort/mergeSort/430 8.649 ms 8.790 ms +1.6%
sort/mergeSort/440 8.718 ms 8.943 ms +2.6%
sort/mergeSort/450 8.964 ms 9.182 ms +2.4%
sort/mergeSort/460 9.209 ms 9.423 ms +2.3%
sort/mergeSort/470 9.544 ms 9.691 ms +1.5%
sort/mergeSort/480 9.655 ms 9.941 ms +3.0%
sort/mergeSort/490 10.01 ms 10.18 ms +1.7%
sort/mergeSort/500 10.21 ms 10.49 ms +2.7%
sort/quickSort/10 83.21 μs 82.65 μs -0.7%
sort/quickSort/20 305.7 μs 308.0 μs +0.8%
sort/quickSort/30 671.9 μs 674.1 μs +0.3%
sort/quickSort/40 1.205 ms 1.209 ms +0.3%
sort/quickSort/50 1.891 ms 1.889 ms -0.1%
sort/quickSort/60 2.728 ms 2.733 ms +0.2%
sort/quickSort/70 3.716 ms 3.730 ms +0.4%
sort/quickSort/80 4.868 ms 4.875 ms +0.1%
sort/quickSort/90 6.167 ms 6.194 ms +0.4%
sort/quickSort/100 7.533 ms 7.547 ms +0.2%
sort/quickSort/110 9.292 ms 9.173 ms -1.3%
sort/quickSort/120 10.89 ms 10.91 ms +0.2%
sort/quickSort/130 12.77 ms 12.78 ms +0.1%
sort/quickSort/140 14.69 ms 14.74 ms +0.3%
sort/quickSort/150 16.95 ms 17.06 ms +0.6%
sort/quickSort/160 19.23 ms 19.32 ms +0.5%
sort/quickSort/170 21.62 ms 21.76 ms +0.6%
sort/quickSort/180 24.27 ms 24.40 ms +0.5%
sort/quickSort/190 27.06 ms 27.15 ms +0.3%
sort/quickSort/200 30.06 ms 29.82 ms -0.8%
sort/quickSort/210 33.06 ms 33.00 ms -0.2%
sort/quickSort/220 36.32 ms 36.33 ms +0.0%
sort/quickSort/230 39.51 ms 39.57 ms +0.2%
sort/quickSort/240 43.09 ms 43.08 ms -0.0%
sort/quickSort/250 46.62 ms 46.69 ms +0.2%
sort/quickSort/260 50.54 ms 50.49 ms -0.1%
sort/quickSort/270 54.44 ms 54.39 ms -0.1%
sort/quickSort/280 58.52 ms 58.66 ms +0.2%
sort/quickSort/290 62.77 ms 62.91 ms +0.2%
sort/quickSort/300 67.13 ms 67.26 ms +0.2%
sort/quickSort/310 71.96 ms 71.90 ms -0.1%
sort/quickSort/320 76.68 ms 76.43 ms -0.3%
sort/quickSort/330 81.58 ms 81.34 ms -0.3%
sort/quickSort/340 86.90 ms 86.63 ms -0.3%
sort/quickSort/350 91.59 ms 92.17 ms +0.6%
sort/quickSort/360 97.37 ms 97.53 ms +0.2%
sort/quickSort/370 102.8 ms 102.9 ms +0.1%
sort/quickSort/380 108.4 ms 108.7 ms +0.3%
sort/quickSort/390 114.5 ms 114.8 ms +0.3%
sort/quickSort/400 120.4 ms 120.8 ms +0.3%
sort/quickSort/410 126.5 ms 126.8 ms +0.2%
sort/quickSort/420 133.0 ms 133.1 ms +0.1%
sort/quickSort/430 140.1 ms 139.4 ms -0.5%
sort/quickSort/440 146.0 ms 146.6 ms +0.4%
sort/quickSort/450 152.8 ms 153.4 ms +0.4%
sort/quickSort/460 160.6 ms 160.4 ms -0.1%
sort/quickSort/470 166.9 ms 167.9 ms +0.6%
sort/quickSort/480 175.0 ms 175.0 ms 0.0%
sort/quickSort/490 182.4 ms 182.1 ms -0.2%
sort/quickSort/500 189.4 ms 190.2 ms +0.4%
sum/compiled-from-Haskell/sum-right-builtin/10 8.686 μs 7.218 μs -16.9%
sum/compiled-from-Haskell/sum-right-builtin/50 40.68 μs 33.27 μs -18.2%
sum/compiled-from-Haskell/sum-right-builtin/100 82.05 μs 67.45 μs -17.8%
sum/compiled-from-Haskell/sum-right-builtin/500 443.3 μs 363.8 μs -17.9%
sum/compiled-from-Haskell/sum-right-builtin/1000 981.2 μs 799.4 μs -18.5%
sum/compiled-from-Haskell/sum-right-builtin/5000 6.830 ms 6.016 ms -11.9%
sum/compiled-from-Haskell/sum-right-builtin/10000 15.18 ms 13.94 ms -8.2%
sum/compiled-from-Haskell/sum-right-Scott/10 6.915 μs 7.176 μs +3.8%
sum/compiled-from-Haskell/sum-right-Scott/50 31.62 μs 33.37 μs +5.5%
sum/compiled-from-Haskell/sum-right-Scott/100 63.22 μs 67.46 μs +6.7%
sum/compiled-from-Haskell/sum-right-Scott/500 339.0 μs 359.5 μs +6.0%
sum/compiled-from-Haskell/sum-right-Scott/1000 744.4 μs 787.1 μs +5.7%
sum/compiled-from-Haskell/sum-right-Scott/5000 5.706 ms 6.027 ms +5.6%
sum/compiled-from-Haskell/sum-right-Scott/10000 14.00 ms 14.42 ms +3.0%
sum/compiled-from-Haskell/sum-right-data/10 21.02 μs 17.48 μs -16.8%
sum/compiled-from-Haskell/sum-right-data/50 100.4 μs 85.02 μs -15.3%
sum/compiled-from-Haskell/sum-right-data/100 202.3 μs 170.0 μs -16.0%
sum/compiled-from-Haskell/sum-right-data/500 1.144 ms 925.2 μs -19.1%
sum/compiled-from-Haskell/sum-right-data/1000 2.661 ms 2.132 ms -19.9%
sum/compiled-from-Haskell/sum-right-data/5000 15.33 ms 12.34 ms -19.5%
sum/compiled-from-Haskell/sum-right-data/10000 32.15 ms 25.89 ms -19.5%
sum/compiled-from-Haskell/sum-left-builtin/10 8.399 μs 6.967 μs -17.0%
sum/compiled-from-Haskell/sum-left-builtin/50 39.81 μs 32.34 μs -18.8%
sum/compiled-from-Haskell/sum-left-builtin/100 79.41 μs 65.06 μs -18.1%
sum/compiled-from-Haskell/sum-left-builtin/500 425.8 μs 346.5 μs -18.6%
sum/compiled-from-Haskell/sum-left-builtin/1000 948.6 μs 763.8 μs -19.5%
sum/compiled-from-Haskell/sum-left-builtin/5000 6.699 ms 5.863 ms -12.5%
sum/compiled-from-Haskell/sum-left-builtin/10000 14.59 ms 13.23 ms -9.3%
sum/compiled-from-Haskell/sum-left-Scott/10 6.709 μs 7.093 μs +5.7%
sum/compiled-from-Haskell/sum-left-Scott/50 31.10 μs 32.60 μs +4.8%
sum/compiled-from-Haskell/sum-left-Scott/100 62.80 μs 64.96 μs +3.4%
sum/compiled-from-Haskell/sum-left-Scott/500 331.2 μs 341.6 μs +3.1%
sum/compiled-from-Haskell/sum-left-Scott/1000 722.8 μs 748.2 μs +3.5%
sum/compiled-from-Haskell/sum-left-Scott/5000 5.842 ms 5.958 ms +2.0%
sum/compiled-from-Haskell/sum-left-Scott/10000 13.23 ms 13.45 ms +1.7%
sum/compiled-from-Haskell/sum-left-data/10 21.86 μs 17.69 μs -19.1%
sum/compiled-from-Haskell/sum-left-data/50 105.0 μs 84.94 μs -19.1%
sum/compiled-from-Haskell/sum-left-data/100 208.8 μs 169.1 μs -19.0%
sum/compiled-from-Haskell/sum-left-data/500 1.175 ms 906.4 μs -22.9%
sum/compiled-from-Haskell/sum-left-data/1000 2.713 ms 2.070 ms -23.7%
sum/compiled-from-Haskell/sum-left-data/5000 15.42 ms 11.83 ms -23.3%
sum/compiled-from-Haskell/sum-left-data/10000 32.21 ms 24.61 ms -23.6%
sum/hand-written-PLC/sum-right-builtin/10 8.660 μs 7.364 μs -15.0%
sum/hand-written-PLC/sum-right-builtin/50 38.40 μs 34.47 μs -10.2%
sum/hand-written-PLC/sum-right-builtin/100 76.19 μs 68.38 μs -10.3%
sum/hand-written-PLC/sum-right-builtin/500 386.9 μs 342.2 μs -11.6%
sum/hand-written-PLC/sum-right-builtin/1000 807.9 μs 703.1 μs -13.0%
sum/hand-written-PLC/sum-right-builtin/5000 4.760 ms 4.273 ms -10.2%
sum/hand-written-PLC/sum-right-builtin/10000 9.833 ms 8.879 ms -9.7%
sum/hand-written-PLC/sum-right-Scott/10 5.632 μs 6.027 μs +7.0%
sum/hand-written-PLC/sum-right-Scott/50 24.92 μs 26.38 μs +5.9%
sum/hand-written-PLC/sum-right-Scott/100 48.07 μs 50.89 μs +5.9%
sum/hand-written-PLC/sum-right-Scott/500 247.4 μs 261.7 μs +5.8%
sum/hand-written-PLC/sum-right-Scott/1000 514.1 μs 549.9 μs +7.0%
sum/hand-written-PLC/sum-right-Scott/5000 3.635 ms 3.836 ms +5.5%
sum/hand-written-PLC/sum-right-Scott/10000 8.080 ms 8.566 ms +6.0%
sum/hand-written-PLC/sum-left-builtin/10 8.948 μs 8.214 μs -8.2%
sum/hand-written-PLC/sum-left-builtin/50 41.08 μs 36.45 μs -11.3%
sum/hand-written-PLC/sum-left-builtin/100 81.37 μs 72.25 μs -11.2%
sum/hand-written-PLC/sum-left-builtin/500 394.7 μs 351.7 μs -10.9%
sum/hand-written-PLC/sum-left-builtin/1000 776.2 μs 697.6 μs -10.1%
sum/hand-written-PLC/sum-left-builtin/5000 3.837 ms 3.452 ms -10.0%
sum/hand-written-PLC/sum-left-builtin/10000 7.673 ms 6.876 ms -10.4%
sum/hand-written-PLC/sum-left-Scott/10 5.869 μs 6.031 μs +2.8%
sum/hand-written-PLC/sum-left-Scott/50 26.91 μs 28.18 μs +4.7%
sum/hand-written-PLC/sum-left-Scott/100 52.93 μs 56.06 μs +5.9%
sum/hand-written-PLC/sum-left-Scott/500 268.0 μs 278.5 μs +3.9%
sum/hand-written-PLC/sum-left-Scott/1000 543.9 μs 565.6 μs +4.0%
sum/hand-written-PLC/sum-left-Scott/5000 3.313 ms 3.442 ms +3.9%
sum/hand-written-PLC/sum-left-Scott/10000 6.870 ms 7.083 ms +3.1%

github-actions[bot] avatar Jan 10 '24 00:01 github-actions[bot]