Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use SWAR technique for more efficient serialization #866

Merged
merged 5 commits into from
Mar 24, 2022

Conversation

plokhotnyuk
Copy link
Owner

@plokhotnyuk plokhotnyuk commented Feb 23, 2022

Before

[info] Benchmark                                                              (size)   Mode  Cnt        Score       Error   Units
[info] ArrayOfBooleansWriting.jsoniterScala                                      128  thrpt   25  4458639.175 ± 63709.601   ops/s
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.alloc.rate                       128  thrpt   25     2062.367 ±    29.438  MB/sec
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.alloc.rate.norm                  128  thrpt   25      728.024 ±     0.001    B/op
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Eden_Space              128  thrpt   25     2066.625 ±   134.569  MB/sec
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm         128  thrpt   25      729.251 ±    43.522    B/op
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Survivor_Space          128  thrpt   25        0.072 ±     0.043  MB/sec
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm     128  thrpt   25        0.026 ±     0.015    B/op
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.count                            128  thrpt   25      101.000              counts
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.time                             128  thrpt   25       49.000                  ms
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc                              128  thrpt   25  5082912.453 ± 99819.166   ops/s
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc:·gc.alloc.rate               128  thrpt   25       ≈ 10⁻⁴              MB/sec
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm          128  thrpt   25       ≈ 10⁻⁴                B/op
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc:·gc.count                    128  thrpt   25          ≈ 0              counts
[info] ArrayOfLongsWriting.jsoniterScala                                         128  thrpt   25   924508.495 ±  5984.689   ops/s
[info] ArrayOfLongsWriting.jsoniterScala:·gc.alloc.rate                          128  thrpt   25      878.784 ±     5.701  MB/sec
[info] ArrayOfLongsWriting.jsoniterScala:·gc.alloc.rate.norm                     128  thrpt   25     1496.060 ±     0.016    B/op
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                 128  thrpt   25      920.769 ±   156.421  MB/sec
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm            128  thrpt   25     1568.095 ±   267.530    B/op
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space             128  thrpt   25        0.828 ±     1.223  MB/sec
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm        128  thrpt   25        1.413 ±     2.088    B/op
[info] ArrayOfLongsWriting.jsoniterScala:·gc.count                               128  thrpt   25       45.000              counts
[info] ArrayOfLongsWriting.jsoniterScala:·gc.time                                128  thrpt   25       55.000                  ms
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc                                 128  thrpt   25   996838.828 ± 11775.262   ops/s
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                  128  thrpt   25       ≈ 10⁻⁴              MB/sec
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm             128  thrpt   25       ≈ 10⁻³                B/op
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc:·gc.count                       128  thrpt   25          ≈ 0              counts
[info] ArrayOfShortsWriting.jsoniterScala                                        128  thrpt   25  2813370.127 ± 91263.532   ops/s
[info] ArrayOfShortsWriting.jsoniterScala:·gc.alloc.rate                         128  thrpt   25      958.158 ±    31.087  MB/sec
[info] ArrayOfShortsWriting.jsoniterScala:·gc.alloc.rate.norm                    128  thrpt   25      536.021 ±     0.004    B/op
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                128  thrpt   25     1002.626 ±    76.636  MB/sec
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm           128  thrpt   25      560.892 ±    42.496    B/op
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space            128  thrpt   25        0.823 ±     1.221  MB/sec
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm       128  thrpt   25        0.461 ±     0.685    B/op
[info] ArrayOfShortsWriting.jsoniterScala:·gc.count                              128  thrpt   25       49.000              counts
[info] ArrayOfShortsWriting.jsoniterScala:·gc.time                               128  thrpt   25       54.000                  ms
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc                                128  thrpt   25  2975819.637 ± 28745.179   ops/s
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                 128  thrpt   25       ≈ 10⁻⁴              MB/sec
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm            128  thrpt   25       ≈ 10⁻⁴                B/op
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc:·gc.count                      128  thrpt   25          ≈ 0              counts
[info] ArrayOfUUIDsWriting.jsoniterScala                                         128  thrpt   25   684445.143 ±  3588.079   ops/s
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.alloc.rate                          128  thrpt   25     2181.365 ±    11.427  MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.alloc.rate.norm                     128  thrpt   25     5016.163 ±     0.012    B/op
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                 128  thrpt   25     2148.463 ±   156.448  MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm            128  thrpt   25     4940.934 ±   362.539    B/op
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space             128  thrpt   25        0.069 ±     0.028  MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm        128  thrpt   25        0.159 ±     0.064    B/op
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.count                               128  thrpt   25      105.000              counts
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.time                                128  thrpt   25       51.000                  ms
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc                                 128  thrpt   25   896328.083 ±  3729.540   ops/s
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                  128  thrpt   25       ≈ 10⁻⁴              MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm             128  thrpt   25       ≈ 10⁻³                B/op
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc:·gc.count                       128  thrpt   25          ≈ 0              counts
[info] ArrayOfYearsWriting.jsoniterScala                                         128  thrpt   25  3022385.770 ± 16160.276   ops/s
[info] ArrayOfYearsWriting.jsoniterScala:·gc.alloc.rate                          128  thrpt   25     1766.753 ±     9.453  MB/sec
[info] ArrayOfYearsWriting.jsoniterScala:·gc.alloc.rate.norm                     128  thrpt   25      920.030 ±     0.003    B/op
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                 128  thrpt   25     1739.229 ±   191.585  MB/sec
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm            128  thrpt   25      905.992 ±   101.293    B/op
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space             128  thrpt   25        0.067 ±     0.036  MB/sec
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm        128  thrpt   25        0.035 ±     0.019    B/op
[info] ArrayOfYearsWriting.jsoniterScala:·gc.count                               128  thrpt   25       85.000              counts
[info] ArrayOfYearsWriting.jsoniterScala:·gc.time                                128  thrpt   25       44.000                  ms
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc                                 128  thrpt   25  3549626.006 ± 24661.944   ops/s
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                  128  thrpt   25       ≈ 10⁻⁴              MB/sec
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm             128  thrpt   25       ≈ 10⁻⁴                B/op
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc:·gc.count                       128  thrpt   25          ≈ 0              counts

After

[info] Benchmark                                                              (size)   Mode  Cnt        Score        Error   Units
[info] ArrayOfBooleansWriting.jsoniterScala                                      128  thrpt   25  6028369.424 ±  87069.283   ops/s
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.alloc.rate                       128  thrpt   25     2788.608 ±     40.348  MB/sec
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.alloc.rate.norm                  128  thrpt   25      728.024 ±      0.002    B/op
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Eden_Space              128  thrpt   25     2782.930 ±    194.127  MB/sec
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm         128  thrpt   25      726.823 ±     51.932    B/op
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Survivor_Space          128  thrpt   25        0.091 ±      0.038  MB/sec
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm     128  thrpt   25        0.024 ±      0.010    B/op
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.count                            128  thrpt   25      136.000               counts
[info] ArrayOfBooleansWriting.jsoniterScala:·gc.time                             128  thrpt   25       67.000                   ms
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc                              128  thrpt   25  7414436.038 ±  34629.583   ops/s
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc:·gc.alloc.rate               128  thrpt   25       ≈ 10⁻⁴               MB/sec
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm          128  thrpt   25       ≈ 10⁻⁴                 B/op
[info] ArrayOfBooleansWriting.jsoniterScalaPrealloc:·gc.count                    128  thrpt   25          ≈ 0               counts
[info] ArrayOfLongsWriting.jsoniterScala                                         128  thrpt   25   931553.345 ±   6671.878   ops/s
[info] ArrayOfLongsWriting.jsoniterScala:·gc.alloc.rate                          128  thrpt   25      885.482 ±      6.337  MB/sec
[info] ArrayOfLongsWriting.jsoniterScala:·gc.alloc.rate.norm                     128  thrpt   25     1496.059 ±      0.016    B/op
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                 128  thrpt   25      920.768 ±    156.414  MB/sec
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm            128  thrpt   25     1555.806 ±    264.557    B/op
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space             128  thrpt   25        0.819 ±      1.216  MB/sec
[info] ArrayOfLongsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm        128  thrpt   25        1.380 ±      2.050    B/op
[info] ArrayOfLongsWriting.jsoniterScala:·gc.count                               128  thrpt   25       45.000               counts
[info] ArrayOfLongsWriting.jsoniterScala:·gc.time                                128  thrpt   25       52.000                   ms
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc                                 128  thrpt   25  1009089.996 ±  10250.336   ops/s
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                  128  thrpt   25       ≈ 10⁻⁴               MB/sec
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm             128  thrpt   25       ≈ 10⁻³                 B/op
[info] ArrayOfLongsWriting.jsoniterScalaPrealloc:·gc.count                       128  thrpt   25          ≈ 0               counts
[info] ArrayOfShortsWriting.jsoniterScala                                        128  thrpt   25  2733561.211 ± 107113.747   ops/s
[info] ArrayOfShortsWriting.jsoniterScala:·gc.alloc.rate                         128  thrpt   25      930.968 ±     36.464  MB/sec
[info] ArrayOfShortsWriting.jsoniterScala:·gc.alloc.rate.norm                    128  thrpt   25      536.020 ±      0.005    B/op
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                128  thrpt   25      920.770 ±    156.427  MB/sec
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm           128  thrpt   25      529.962 ±     89.023    B/op
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space            128  thrpt   25        0.817 ±      1.214  MB/sec
[info] ArrayOfShortsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm       128  thrpt   25        0.475 ±      0.707    B/op
[info] ArrayOfShortsWriting.jsoniterScala:·gc.count                              128  thrpt   25       45.000               counts
[info] ArrayOfShortsWriting.jsoniterScala:·gc.time                               128  thrpt   25       50.000                   ms
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc                                128  thrpt   25  3299744.917 ± 154775.030   ops/s
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                 128  thrpt   25       ≈ 10⁻⁴               MB/sec
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm            128  thrpt   25       ≈ 10⁻⁴                 B/op
[info] ArrayOfShortsWriting.jsoniterScalaPrealloc:·gc.count                      128  thrpt   25          ≈ 0               counts
[info] ArrayOfUUIDsWriting.jsoniterScala                                         128  thrpt   25   713388.120 ±   4744.069   ops/s
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.alloc.rate                          128  thrpt   25     2273.627 ±     15.128  MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.alloc.rate.norm                     128  thrpt   25     5016.164 ±      0.014    B/op
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                 128  thrpt   25     2250.761 ±    191.581  MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm            128  thrpt   25     4965.525 ±    419.947    B/op
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space             128  thrpt   25        0.081 ±      0.033  MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm        128  thrpt   25        0.178 ±      0.071    B/op
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.count                               128  thrpt   25      110.000               counts
[info] ArrayOfUUIDsWriting.jsoniterScala:·gc.time                                128  thrpt   25       55.000                   ms
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc                                 128  thrpt   25   924222.447 ±  11440.995   ops/s
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                  128  thrpt   25       ≈ 10⁻⁴               MB/sec
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm             128  thrpt   25       ≈ 10⁻³                 B/op
[info] ArrayOfUUIDsWriting.jsoniterScalaPrealloc:·gc.count                       128  thrpt   25          ≈ 0               counts
[info] ArrayOfYearsWriting.jsoniterScala                                         128  thrpt   25  3303992.916 ±  24660.536   ops/s
[info] ArrayOfYearsWriting.jsoniterScala:·gc.alloc.rate                          128  thrpt   25     1931.381 ±     14.422  MB/sec
[info] ArrayOfYearsWriting.jsoniterScala:·gc.alloc.rate.norm                     128  thrpt   25      920.030 ±      0.003    B/op
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Eden_Space                 128  thrpt   25     1923.424 ±    167.021  MB/sec
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Eden_Space.norm            128  thrpt   25      916.449 ±     80.539    B/op
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space             128  thrpt   25        0.056 ±      0.028  MB/sec
[info] ArrayOfYearsWriting.jsoniterScala:·gc.churn.PS_Survivor_Space.norm        128  thrpt   25        0.027 ±      0.013    B/op
[info] ArrayOfYearsWriting.jsoniterScala:·gc.count                               128  thrpt   25       94.000               counts
[info] ArrayOfYearsWriting.jsoniterScala:·gc.time                                128  thrpt   25       47.000                   ms
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc                                 128  thrpt   25  3566464.404 ±  34206.451   ops/s
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc:·gc.alloc.rate                  128  thrpt   25       ≈ 10⁻⁴               MB/sec
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc:·gc.alloc.rate.norm             128  thrpt   25       ≈ 10⁻⁴                 B/op
[info] ArrayOfYearsWriting.jsoniterScalaPrealloc:·gc.count                       128  thrpt   25          ≈ 0               counts

@plokhotnyuk plokhotnyuk force-pushed the use-swar-technique branch 2 times, most recently from 784d663 to bd26331 Compare February 23, 2022 15:28
@plokhotnyuk plokhotnyuk changed the title Use SWAR technique for serialization of Boolean, Long and UUID values Use SWAR technique for serialization of Boolean, Long, Short, UUID and Year values Mar 24, 2022
@plokhotnyuk plokhotnyuk changed the title Use SWAR technique for serialization of Boolean, Long, Short, UUID and Year values Use SWAR technique for more efficient serialization Mar 24, 2022
@plokhotnyuk plokhotnyuk merged commit bfdb961 into master Mar 24, 2022
@plokhotnyuk plokhotnyuk deleted the use-swar-technique branch March 24, 2022 17:46
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.

1 participant