Skip to content

Conversation

ypconstante
Copy link
Contributor

Today encode_with_message_props creates a list of FieldProps before calling encode_fields.
Removing this temporary list and :ok tuples on encode_field made encode faster and reduced memory usage.

I also fixed the bench script and updated benchee while workign on this.

Operating System: Linux
CPU Information: Intel(R) Core(TM) i7-10750H CPU @ 2.60GHz
Number of Available Cores: 12
Available memory: 31.17 GB
Elixir 1.18.3
Erlang 27.0.1
JIT enabled: true

##### With input google_message1_proto2 #####
Name                                              ips        average  deviation         median         99th %
encode (optimize-encode-b86fcba-encode)      152.30 K        6.57 μs  ±1020.36%        5.75 μs        8.90 μs
encode (main-d582a31-encode)                 127.27 K        7.86 μs   ±954.45%        6.78 μs       10.06 μs

Comparison:
encode (optimize-encode-b86fcba-encode)      152.30 K
encode (main-d582a31-encode)                 127.27 K - 1.20x slower +1.29 μs

Memory usage statistics:

Name                                       Memory usage
encode (optimize-encode-b86fcba-encode)         2.47 KB
encode (main-d582a31-encode)                    3.51 KB - 1.42x memory usage +1.04 KB

**All measurements for memory usage were the same**

##### With input google_message1_proto3 #####
Name                                              ips        average  deviation         median         99th %
encode (optimize-encode-b86fcba-encode)      142.43 K        7.02 μs   ±931.72%        6.29 μs        9.49 μs
encode (main-d582a31-encode)                 122.52 K        8.16 μs   ±877.64%        7.11 μs       10.84 μs

Comparison:
encode (optimize-encode-b86fcba-encode)      142.43 K
encode (main-d582a31-encode)                 122.52 K - 1.16x slower +1.14 μs

Memory usage statistics:

Name                                       Memory usage
encode (optimize-encode-b86fcba-encode)         2.28 KB
encode (main-d582a31-encode)                    3.31 KB - 1.45x memory usage +1.03 KB

**All measurements for memory usage were the same**

##### With input google_message2 #####
Name                                              ips        average  deviation         median         99th %
encode (optimize-encode-b86fcba-encode)      301.87 K        3.31 μs  ±2468.44%        2.76 μs        4.98 μs
encode (main-d582a31-encode)                 246.10 K        4.06 μs  ±2028.37%        3.35 μs        5.94 μs

Comparison:
encode (optimize-encode-b86fcba-encode)      301.87 K
encode (main-d582a31-encode)                 246.10 K - 1.23x slower +0.75 μs

Memory usage statistics:

Name                                       Memory usage
encode (optimize-encode-b86fcba-encode)         1.52 KB
encode (main-d582a31-encode)                    2.02 KB - 1.34x memory usage +0.51 KB

@whatyouhide
Copy link
Collaborator

whatyouhide commented Jun 18, 2025

Lovely, thank you @ypconstante 💟

@whatyouhide whatyouhide merged commit b9ba207 into elixir-protobuf:main Jun 18, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants