Skip to content

Data.Vector.Fusion.Bundle.Size.Size fields are not strict #452

Description

@konsumlamm

The Size type in Data.Vector.Fusion.Bundle.Size is currently defined like this:

data Size = Exact Int          -- ^ Exact size
          | Max   Int          -- ^ Upper bound on the size
          | Unknown            -- ^ Unknown size

Is there any reason why the Int fields aren't strict, so that they can be unboxed? This seems like an obvious improvement, so maybe I'm missing something.

Activity

  1. konsumlamm commented on Feb 14, 2023

    @konsumlamm
    ContributorAuthor

    Looking at the benchmarks, making the fields strict seems to improve performance.

    Before:

    All
      listRank:          OK (1.43s)
        196  ms ± 4.7 ms
      rootfix:           OK (0.18s)
        9.55 ms ± 768 μs
      leaffix:           OK (0.34s)
        9.02 ms ± 387 μs
      awshcc:            OK (1.09s)
        357  ms ±  16 ms
      hybcc:             OK (1.00s)
        64.5 ms ± 3.8 ms
      quickhull:         OK (0.28s)
        87.3 ms ± 6.3 ms
      spectral:          OK (0.63s)
        4.35 ms ± 112 μs
      tridiag:           OK (1.65s)
        110  ms ± 7.0 ms
      mutableSet:        OK (0.66s)
        85.9 ms ± 2.3 ms
      findIndexR:        OK (0.20s)
        247  μs ±  21 μs
      findIndexR_naïve:  OK (2.67s)
        81.8 ms ± 4.6 ms
      findIndexR_manual: OK (3.74s)
        447  μs ± 6.3 μs
      minimumOn:         OK (0.37s)
        5.10 ms ± 177 μs
      maximumOn:         OK (0.19s)
        5.09 ms ± 472 μs
    

    After:

    All
      listRank:          OK (0.58s)
        187  ms ±  11 ms,       same as baseline
      rootfix:           OK (0.17s)
        9.59 ms ± 880 μs,       same as baseline
      leaffix:           OK (0.34s)
        9.09 ms ± 478 μs,       same as baseline
      awshcc:            OK (1.09s)
        359  ms ±  11 ms,       same as baseline
      hybcc:             OK (0.20s)
        60.7 ms ± 3.0 ms,  5% less than baseline
      quickhull:         OK (0.26s)
        81.4 ms ± 5.5 ms,       same as baseline
      spectral:          OK (0.45s)
        3.01 ms ± 294 μs, 30% less than baseline
      tridiag:           OK (0.72s)
        98.5 ms ± 8.2 ms, 10% less than baseline
      mutableSet:        OK (2.82s)
        85.4 ms ± 1.5 ms,       same as baseline
      findIndexR:        OK (0.30s)
        247  μs ±  15 μs,       same as baseline
      findIndexR_naïve:  OK (1.36s)
        84.2 ms ± 6.1 ms,       same as baseline
      findIndexR_manual: OK (1.83s)
        414  μs ± 7.8 μs,  7% less than baseline
      minimumOn:         OK (0.38s)
        5.33 ms ± 307 μs,       same as baseline
      maximumOn:         OK (0.31s)
        5.08 ms ± 259 μs,       same as baseline
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions