roaring icon indicating copy to clipboard operation
roaring copied to clipboard

simplify checksum function

Open lemire opened this issue 1 month ago • 2 comments

This simplifies the CheckSum function. I am not expecting nor seeing a performance difference. I am also adding a check to make sure we do not check the CheckSum results.

 benchstat   old.txt new.txt             
goos: darwin
goarch: arm64
pkg: github.com/RoaringBitmap/roaring/v2
cpu: Apple M4 Max
                                        │       old.txt       │                   new.txt                   │
                                        │       sec/op        │       sec/op         vs base                │
Checksum/checksum-1-14                    0.0000003000n ± ∞ ¹   0.0000001000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1-14         0.0000001000n ± ∞ ¹   0.0000001000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-2-14                                          0.0000001000n ± ∞ ¹
Checksum/checksum-compressed-2-14         0.0000001000n ± ∞ ¹   0.0000002000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-4-14                    0.0000001000n ± ∞ ¹   0.0000001000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-compressed-4-14         0.0000001000n ± ∞ ¹   0.0000001000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-8-14                    0.0000001000n ± ∞ ¹   0.0000002000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-8-14         0.0000001000n ± ∞ ¹   0.0000002000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-16-14                   0.0000002000n ± ∞ ¹   0.0000001000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-16-14        0.0000002000n ± ∞ ¹   0.0000002000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-32-14                   0.0000002000n ± ∞ ¹   0.0000002000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-compressed-32-14        0.0000002000n ± ∞ ¹   0.0000004000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-64-14                   0.0000005000n ± ∞ ¹   0.0000003000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-64-14        0.0000006000n ± ∞ ¹   0.0000005000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-128-14                  0.0000005000n ± ∞ ¹   0.0000005000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-compressed-128-14       0.0000008000n ± ∞ ¹   0.0000008000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-256-14                  0.0000008000n ± ∞ ¹   0.0000091000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-256-14        0.000001500n ± ∞ ¹    0.000001500n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-512-14                   0.000001500n ± ∞ ¹    0.000001500n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-compressed-512-14        0.000002700n ± ∞ ¹    0.000002500n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-1024-14                  0.000002700n ± ∞ ¹    0.000002700n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-compressed-1024-14       0.000005000n ± ∞ ¹    0.000004900n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-2048-14                  0.000005400n ± ∞ ¹    0.000005400n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-compressed-2048-14       0.000009500n ± ∞ ¹    0.000009300n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-4096-14                   0.00001060n ± ∞ ¹     0.00001050n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-4096-14        0.00001570n ± ∞ ¹     0.00001590n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-8192-14                   0.00002110n ± ∞ ¹     0.00001960n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-8192-14        0.00001960n ± ∞ ¹     0.00002190n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-16384-14                  0.00004000n ± ∞ ¹     0.00003840n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-16384-14       0.00002500n ± ∞ ¹     0.00002550n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-32768-14                  0.00007310n ± ∞ ¹     0.00007680n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-32768-14       0.00001480n ± ∞ ¹     0.00001850n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-65536-14                   0.0001350n ± ∞ ¹      0.0001363n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-65536-14      0.000003300n ± ∞ ¹    0.000004200n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-131072-14                  0.0001757n ± ∞ ¹      0.0002001n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-131072-14    0.0000003000n ± ∞ ¹   0.0000004000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-262144-14                  0.0002299n ± ∞ ¹      0.0001968n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-262144-14    0.0000003000n ± ∞ ¹   0.0000002000n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-524288-14                  0.0001927n ± ∞ ¹      0.0002065n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-524288-14    0.0000003000n ± ∞ ¹   0.0000003000n ± ∞ ¹       ~ (p=1.000 n=1) ³
Checksum/checksum-1048576-14                 0.0002274n ± ∞ ¹      0.0001977n ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1048576-14   0.0000004000n ± ∞ ¹   0.0000003000n ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                                    0.000002206n          0.000002183n        +6.66%
¹ need >= 6 samples for confidence interval at level 0.95
² need >= 4 samples to detect a difference at alpha level 0.05
³ all samples are equal

                                        │   old.txt   │               new.txt               │
                                        │    B/op     │    B/op      vs base                │
Checksum/checksum-1-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-2-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-2-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-4-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-4-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-8-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-8-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-16-14                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-16-14        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-32-14                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-32-14        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-64-14                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-64-14        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-128-14                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-128-14       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-256-14                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-256-14       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-512-14                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-512-14       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-1024-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1024-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-2048-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-2048-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-4096-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-4096-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-8192-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-8192-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-16384-14                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-16384-14     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-32768-14                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-32768-14     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-65536-14                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-65536-14     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-131072-14               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-131072-14    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-262144-14               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-262144-14    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-524288-14               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-524288-14    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-1048576-14              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1048576-14   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                                             ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                                        │   old.txt   │               new.txt               │
                                        │  allocs/op  │  allocs/op   vs base                │
Checksum/checksum-1-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-2-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-2-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-4-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-4-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-8-14                    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-8-14         0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-16-14                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-16-14        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-32-14                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-32-14        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-64-14                   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-64-14        0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-128-14                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-128-14       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-256-14                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-256-14       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-512-14                  0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-512-14       0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-1024-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1024-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-2048-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-2048-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-4096-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-4096-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-8192-14                 0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-8192-14      0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-16384-14                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-16384-14     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-32768-14                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-32768-14     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-65536-14                0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-65536-14     0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-131072-14               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-131072-14    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-262144-14               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-262144-14    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-524288-14               0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-524288-14    0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-1048576-14              0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
Checksum/checksum-compressed-1048576-14   0.000 ± ∞ ¹   0.000 ± ∞ ¹       ~ (p=1.000 n=1) ²
geomean                                             ³                +0.00%               ³
¹ need >= 6 samples for confidence interval at level 0.95
² all samples are equal
³ summaries must be >0 to compute geomean

                       │   old.txt   │
                       │    ns/op    │
Checksum/checksum-2-14   0.000 ± ∞ ¹
¹ need >= 6 samples for confidence interval at level 0.95

lemire avatar Nov 26 '25 04:11 lemire

Looks good to me:

  • the code isn't using the serialization functions, which could call unsafe functions
  • it's clear what the hash is actually doing
  • I'm happy that there is no functional change

happygiraffe avatar Nov 26 '25 10:11 happygiraffe

@happygiraffe Thanks.

I will let it stew in case someone has other comments.

lemire avatar Nov 26 '25 20:11 lemire