--
You received this message because you are subscribed to the Google Groups "elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to elixir-lang-co...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/7c79a2b8-3a3c-48f9-a4d0-7d2e07c851e4n%40googlegroups.com.
iex> map
%{a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9, j: 10}
iex> kv
[a: 11, d: 22, g: 33, j: 44]
iex> keys
[:a, :d, :g, :j]
iex(32)> Benchmark.measure(10_000, "reduce + replace!", fn -> Enum.reduce(kv, map, fn {k, v}, acc -> Map.replace!(acc, k, v) end) end)
reduce + replace! avg: 18.2396
iex(33)> Benchmark.measure(10_000, "replace_many", fn -> Map.replace_many(map, kv) end)
replace_many avg: 1.0979
iex(34)> Benchmark.measure(10_000, "reduce + update!", fn -> Enum.reduce(keys, map, fn k, acc -> Map.update!(acc, k, &(&1*2)) end) end)
reduce + update! avg: 48.284
iex(35)> Benchmark.measure(10_000, "update_many", fn -> Map.update_many(map, keys, &(&1*2)) end)
update_many avg: 9.8719
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/63cf4231-5747-4f8e-99f7-87a68a7ab664n%40googlegroups.com.
Putting them in a module in any file (with e.g. a `.ex` or `.exs`
extension) and running them from there will work.
You might also like to look into libraries such as `Benchee` which
make benchmarking easier and prevent some of the pitfalls which a
homebrew benchmarking implementation might have.
Hope this helps, and happy old year/new year :-),
~Marten
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/cb88ccf3-ece7-47b5-a6d6-7ba5253482bfn%40googlegroups.com.
Name ips average deviation median 99th %
map replace_many 2.69 M 371.13 ns ±10368.06% 0 ns 990 ns
map for + replace 2.32 M 430.38 ns ±8111.30% 0 ns 990 ns
map reduce + replace! 2.32 M 431.63 ns ±8167.48% 0 ns 990 ns
map update_many 2.05 M 488.47 ns ±9258.19% 0 ns 990 ns
map for + update! 1.64 M 609.13 ns ±5804.57% 0 ns 990 ns
map reduce + update! 1.66 M 600.64 ns ±5698.26% 0 ns 990 ns
keywords replace_many 1.91 M 523.22 ns ±6849.81% 0 ns 990 ns
keywords for + replace! 1.84 M 544.19 ns ±6432.10% 0 ns 990 ns
keywords reduce + replace! 1.82 M 550.39 ns ±6488.68% 0 ns 990 ns
keywords update_many 1.78 M 561.74 ns ±6508.52% 0 ns 990 ns
keywords for + update! 1.49 M 670.96 ns ±6347.76% 0 ns 990 ns
keywords reduce + update! 1.46 M 686.43 ns ±6250.71% 0 ns 990 ns
Name ips average deviation median 99th %
map replace_many 1.93 M 517.77 ns ±9182.17% 0 ns 1000 ns
map reduce + replace! 1.58 M 631.47 ns ±7266.46% 0 ns 2000 ns
map for + replace 1.58 M 634.43 ns ±8194.35% 0 ns 2000 ns
Comparison:
map replace_many 1.93 M
map reduce + replace! 1.58 M - 1.22x slower +113.70 ns
map for + replace 1.58 M - 1.23x slower +116.66 ns
Name ips average deviation median 99th %
map update_many 1.43 M 701.44 ns ±7768.55% 0 ns 2000 ns
map for + update! 1.20 M 832.54 ns ±5683.86% 1000 ns 2000 ns
map reduce + update! 1.17 M 851.53 ns ±4816.16% 1000 ns 2000 ns
Comparison:
map update_many 1.43 M
map for + update! 1.20 M - 1.19x slower +131.09 ns
map reduce + update! 1.17 M - 1.21x slower +150.08 ns
Name ips average deviation median 99th %
keywords replace_many 1.49 M 669.04 ns ±5836.31% 980 ns 1980 ns
keywords reduce + replace! 1.41 M 710.24 ns ±5503.07% 980 ns 1980 ns
keywords for + replace! 1.40 M 714.06 ns ±5791.74% 980 ns 1980 ns
Comparison:
keywords replace_many 1.49 M
keywords reduce + replace! 1.41 M - 1.06x slower +41.19 ns
keywords for + replace! 1.40 M - 1.07x slower +45.02 ns
Name ips average deviation median 99th %
keywords update_many 1.35 M 742.22 ns ±5371.88% 1000 ns 2000 ns
keywords reduce + update! 1.02 M 976.57 ns ±5363.65% 1000 ns 2000 ns
keywords for + update! 1.01 M 986.09 ns ±5456.16% 1000 ns 2000 ns
Comparison:
keywords update_many 1.35 M
keywords reduce + update! 1.02 M - 1.32x slower +234.34 ns
keywords for + update! 1.01 M - 1.33x slower +243.87 ns
Does this sway your opinion on the proposal, José?
To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/7e87dd44-3348-46b9-a0bf-bf4d6a806dffn%40googlegroups.com.