JuliaData / MemPool.jl

High-performance parallel and distributed datastore for Julia
Other
23 stars 14 forks source link

Add approx_size for String and Symbol #47

Closed DrChainsaw closed 3 years ago

DrChainsaw commented 3 years ago

Not sure if the implementation for Symbol is really what one wants, but it does yeild the exact same result as Base.summarysize.

Benchmarks:

String

Before:

julia> @benchmark MemPool.approx_size("aaaa")
BenchmarkTools.Trial: 
  memory estimate:  608 bytes
  allocs estimate:  7
  --------------
  minimum time:     350.000 ns (0.00% GC)
  median time:      375.701 ns (0.00% GC)
  mean time:        511.096 ns (7.43% GC)
  maximum time:     15.956 μs (96.76% GC)
  --------------
  samples:          10000
  evals/sample:     214

After:

julia> @benchmark MemPool.approx_size("aaaa")
BenchmarkTools.Trial: 
  memory estimate:  0 bytes
  allocs estimate:  0
  --------------
  minimum time:     1.200 ns (0.00% GC)
  median time:      1.300 ns (0.00% GC)
  mean time:        1.559 ns (0.00% GC)
  maximum time:     57.100 ns (0.00% GC)
  --------------
  samples:          10000
  evals/sample:     1000

Symbol

Before:

julia> @benchmark MemPool.approx_size(:aaaa)
BenchmarkTools.Trial: 
  memory estimate:  576 bytes
  allocs estimate:  5
  --------------
  minimum time:     211.193 ns (0.00% GC)
  median time:      243.303 ns (0.00% GC)
  mean time:        315.998 ns (9.53% GC)
  maximum time:     7.154 μs (89.33% GC)
  --------------
  samples:          10000
  evals/sample:     545

After:

julia> @benchmark MemPool.approx_size(:aaaa)
BenchmarkTools.Trial: 
  memory estimate:  0 bytes
  allocs estimate:  0
  --------------
  minimum time:     0.001 ns (0.00% GC)
  median time:      0.001 ns (0.00% GC)
  mean time:        0.027 ns (0.00% GC)
  maximum time:     0.100 ns (0.00% GC)
  --------------
  samples:          10000
  evals/sample:     1000
jpsamaroo commented 3 years ago

Thanks!