1 unstable release
0.1.0 | Jul 7, 2023 |
---|
#1086 in Concurrency
21KB
340 lines
hyperloglog
a concurrent, super fast, pretty-well-tested and fully safe hyperloglog for rust with no dependencies.
on my m1 macbook pro, there is no overhead to concurrency (only uses relaxed ordering), so it is not configurable feature.
you know, concurrency that just works. its pretty magic.
performance:
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| b | num_threads | elements_per_thread | duration | est. cardinality | error | z score |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 12 | 1 | 80000000 | 0.783505583 | 81407162.3289801 | 0.017589529112251288 | 1.0824325607539254 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 12 | 2 | 40000000 | 0.392236 | 81407162.3289801 | 0.017589529112251288 | 1.0824325607539254 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 12 | 8 | 10000000 | 0.115582916 | 81407162.3289801 | 0.017589529112251288 | 1.0824325607539254 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 12 | 8 | 200000000 | 2.054057208 | 1585805566.3940902 | -0.00887152100369364 | -0.5459397540734547 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 12 | 16 | 200000000 | 3.7321913330000003 | 3227717320.617457 | 0.008661662692955286 | 0.533025396489556 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 16 | 16 | 200000000 | 3.728134916 | 3198889302.695715 | -0.00034709290758907796 | -0.08543825417577304 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 8 | 16 | 200000000 | 3.6748197080000002 | 2962602353.834109 | -0.074186764426841 | -1.1413348373360153 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 4 | 16 | 200000000 | 3.756755708 | 4388265829.463295 | 0.3713330717072797 | 1.4282041219510757 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 4 | 8 | 10000000 | 0.100113625 | 85015087.94729412 | 0.06268859934117645 | 0.24110999746606324 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 4 | 2 | 40000000 | 0.390384833 | 85015087.94729412 | 0.06268859934117645 | 0.24110999746606324 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 4 | 1 | 80000000 | 0.779172958 | 85015087.94729412 | 0.06268859934117645 | 0.24110999746606324 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
| 4 | 2 | 80000000 | 0.785492541 | 208090923.9294848 | 0.3005682745592801 | 1.1560318252280004 |
+----+-------------+---------------------+--------------------+--------------------+-------------------------+----------------------+
memory usage:
the number of registers is configurable by b: m = 2^b
5 registers are stored in 32 bits.
2^b / 5 * 4 gives the bytes of memory used