rlnc

Crates.iorlnc
lib.rsrlnc
version0.8.4
created_at2025-05-09 16:16:09.557444+00
updated_at2025-08-22 16:47:19.76112+00
descriptionRandom Linear Network Coding
homepage
repositoryhttps://github.com/itzmeanjan/rlnc.git
max_upload_size
id1667299
size7,184,694
Anjan Roy (itzmeanjan)

documentation

README

rlnc

Blazing Fast Erasure-Coding with Random Linear Network Coding (RLNC)

Introduction

rlnc is a Rust library crate that implements an advanced erasure-coding technique Random Linear Network Coding (RLNC) over galois field $GF(2^8)$ with irreducible polynomial $x^8 + x^4 + x^3 + x^2 + 1$. This library provides functionalities for blazing fast erasure-coding of data, reconstructing original data from coded pieces, and recoding existing coded pieces to new erasure-coded pieces, without ever decoding it back to original data, using AVX512, AVX2 and SSSE3 intrinsics on x86_64 and NEON intrinsics on arm64, for fast vector multiplication by a single scalar over $GF(2^8)$.

Following charts show performance of RLNC encoder, recoder and decoder on AWS EC2 m7a.large with AMD EPYC 9R14 - which has AVX512 support. More performance benchmark results below.

rlnc-encoder-on-x86_64_with-amd-avx512

rlnc-recoder-on-x86_64_with-amd-avx512

rlnc-decoder-on-x86_64_with-amd-avx512


Let's take a practical example of how RLNC can be useful.

Imagine you want to send a book, split into 10 chapters, to a friend over a very unreliable mail service that often loses envelopes.

The old way is to send each of the 10 chapters in a separate envelope. If even 1 envelope gets lost, your friend can't read the whole book. They have to ask you to send that specific missing chapter again, which is slow and inefficient.

Random Linear Network Coding (RLNC) works like this: instead of sending the original chapters, you create 20 new "summary" envelopes. Each summary envelope is a unique, random mix of sentences from all the original 10 chapters. You then mail these 20 summary envelopes.

The magic is that your friend only needs to receive any 10 of these summary envelopes to perfectly reconstruct the entire book. It doesn't matter if the third one you sent gets lost, as long as another one arrives. Because each envelope contains information from the whole book, any 10 of them provide enough clues to solve the puzzle and rebuild the original 10 chapters.

This makes the transfer incredibly robust and efficient, as you don't need to worry about specific envelopes getting lost, just that enough of them make it to the destination.

RLNC can be used for erasure-coding both data-in-transit and data-in-rest - essentially increasing availability of original data by spreading it into many more pieces s.t. each of them is equally important. For a quick understanding of RLNC, have a look at my blog post @ https://itzmeanjan.in/pages/rlnc-in-depth.html.


Random Linear Network Coding (RLNC) excels in highly dynamic and lossy environments like multicast, peer-to-peer networks, and distributed storage, due to interesting properties such as encoding with random-sampled coefficients, any k out of n coded-pieces are sufficient to recover and recoding new pieces with existing erasure-coded pieces. Unlike Reed-Solomon, which requires specific symbols for deterministic recovery, RLNC allows decoding from any set of linearly independent packets. Compared to Fountain Codes, RLNC offers robust algebraic linearity with coding vector overhead, whereas Fountain codes prioritize very low decoding complexity and indefinite symbol generation, often for large-scale broadcasts.

Features

For now this crate implements only Full RLNC scheme.

  • Encoder: Splits original data into fixed-size pieces and generates new coded pieces by linearly combining these original pieces with random coefficients, sampled from $GF(2^8)$.
  • Decoder: Receives coded pieces, applies Gaussian elimination to recover the original data, and handles linearly dependent pieces gracefully.
  • Recoder: Takes already coded pieces and generates new coded pieces from them, facilitating multi-hop data distribution without requiring intermediate decoding.
  • Error Handling: Defines a custom RLNCError enum to provide clear error messages for various operational failures.

Prerequisites

Rust stable toolchain; see https://rustup.rs for installation guide. MSRV for this crate is 1.89.0.

# While developing this library, I was using
$ rustc --version
rustc 1.89.0 (29483883e 2025-08-04)

Testing

For ensuring functional correctness of RLNC operations, the library includes a comprehensive test suite. Run all the tests by running following commands.

# Testing on host, first with `default` feature, then with `parallel` feature enabled.
make test

# Testing on web assembly target, using `wasmtime`.
rustup target add wasm32-wasip1
rustup target add wasm32-wasip2
cargo install wasmtime-cli@35.0.0 --locked

make test-wasm
running 17 tests
test full::decoder::tests::test_decoder_decode_invalid_piece_length ... ok
test full::decoder::tests::test_decoder_new_invalid_inputs ... ok
test full::encoder::tests::test_encoder_code_with_buf_invalid_inputs ... ok
test full::decoder_matrix::test::test_swap_rows ... ok
test full::encoder::tests::test_encoder_code_with_coding_vector_invalid_inputs ... ok
test full::encoder::tests::test_encoder_getters ... ok
test full::decoder::tests::test_decoder_getters ... ok
test full::encoder::tests::test_encoder_new_invalid_inputs ... ok
test full::encoder::tests::test_encoder_without_padding_invalid_data ... ok
test full::recoder::tests::test_recoder_getters ... ok
test full::recoder::tests::test_recoder_new_invalid_inputs ... ok
test full::recoder::tests::test_recoder_recode_with_buf_invalid_inputs ... ok
test common::gf256::test::prop_test_gf256_operations ... ok
test full::decoder_matrix::test::prop_test_rref_is_idempotent ... ok
test full::tests::prop_test_rlnc_encoder_decoder ... ok
test full::tests::prop_test_rlnc_decoding_with_useless_pieces ... ok
test full::tests::prop_test_rlnc_encoder_recoder_decoder has been running for over 60 seconds
test full::tests::prop_test_rlnc_encoder_recoder_decoder ... ok

test result: ok. 17 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 72.24s

   Doc-tests rlnc

running 3 tests
test src/common/simd_mul_table.rs - common::simd_mul_table (line 25) ... ignored
test src/common/simd_mul_table.rs - common::simd_mul_table (line 8) ... ignored
test src/lib.rs - (line 58) ... ok

test result: ok. 1 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 0.00s

Code Coverage

To generate a detailed code coverage report in HTML format, use cargo-tarpaulin:

# Install cargo-tarpaulin if not already installed
cargo install cargo-tarpaulin
make coverage
Coverage Results:
|| Tested/Total Lines:
|| src/common/errors.rs: 0/1
|| src/common/gf256.rs: 9/11
|| src/common/simd/mod.rs: 6/9
|| src/common/simd/x86/avx2.rs: 10/10
|| src/common/simd/x86/mod.rs: 6/15
|| src/common/simd/x86/ssse3.rs: 0/10
|| src/full/decoder.rs: 25/32
|| src/full/decoder_matrix.rs: 51/58
|| src/full/encoder.rs: 24/27
|| src/full/recoder.rs: 28/36
||
76.08% coverage, 159/209 lines covered

This will create an HTML coverage report at tarpaulin-report.html that you can open in your web browser to view detailed line-by-line coverage information for all source files.

[!NOTE] There is a help menu, which introduces you to all available commands; just run $ make from the root directory of this project.

Benchmarking

Performance benchmarks for several input configurations are included to evaluate the efficiency of this RLNC implementation.

To run the benchmarks, execute the following command from the root of the project:

make bench # First with `default` feature, then with `parallel` feature enabled.

[!WARNING] When benchmarking make sure you've disabled CPU frequency scaling, otherwise numbers you see can be misleading. I find https://github.com/google/benchmark/blob/b40db869/docs/reducing_variance.md helpful.

For visualizing benchmark results see plots directory.

On 12th Gen Intel(R) Core(TM) i7-1260P

Running benchmarks on Linux 6.14.0-27-generic x86_64, compiled with rustc 1.88.0 (6b00bc388 2025-06-23).

Component Peak Median Throughput (default feature) Peak Median Throughput (parallel feature) Impact of number of pieces on performance
Full RLNC Encoder 30.14 GiB/s 23.39 GiB/s The number of pieces original data got split into has a minimal impact on the encoding speed.
Full RLNC Recoder 27.26 GiB/s 12.63 GiB/s Similar to the encoder, the recoder's performance remains largely consistent regardless of how many pieces the original data is split into.
Full RLNC Decoder 1.59 GiB/s Doesn't yet implement a parallel decoding mode As the number of pieces increases, the decoding time increases substantially, leading to a considerable drop in throughput. This indicates that decoding is the most computationally intensive part of the full RLNC scheme, and its performance is inversely proportional to the number of pieces.

In summary, the full RLNC implementation demonstrates excellent encoding and recoding speeds, consistently achieving GiB/s throughputs with minimal sensitivity to the number of data pieces. The parallel feature, leveraging Rust rayon data-parallelism framework, also provides good performance for both encoding and recoding. Whether you want to use that feature, completely depends on your usecase. However, decoding remains a much slower operation, with its performance significantly diminishing as the data is split into a greater number of pieces, and currently does not implement a parallel decoding algorithm.

Click to view detailed benchmark results ๐Ÿ‘‡

Full RLNC Encoder

# Encoding with AVX2-powered SIMD vector x scalar multiplication

Timer precision: 22 ns
full_rlnc_encoder                             fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ encode                                                   โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    32.89 ยตs      โ”‚ 127.4 ยตs      โ”‚ 40.52 ยตs      โ”‚ 41.51 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          31.54 GiB/s   โ”‚ 8.141 GiB/s   โ”‚ 25.6 GiB/s    โ”‚ 24.99 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            16 B        โ”‚ 16 B          โ”‚ 16 B          โ”‚ 16 B          โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    41.24 ยตs      โ”‚ 56.61 ยตs      โ”‚ 43.1 ยตs       โ”‚ 43.33 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          24.41 GiB/s   โ”‚ 17.78 GiB/s   โ”‚ 23.36 GiB/s   โ”‚ 23.24 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 32 B          โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    31.63 ยตs      โ”‚ 43.55 ยตs      โ”‚ 32.9 ยตs       โ”‚ 33.61 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          31.36 GiB/s   โ”‚ 22.77 GiB/s   โ”‚ 30.14 GiB/s   โ”‚ 29.51 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 64 B          โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   35.49 ยตs      โ”‚ 60.33 ยตs      โ”‚ 36.4 ยตs       โ”‚ 37.23 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          27.73 GiB/s   โ”‚ 16.31 GiB/s   โ”‚ 27.04 GiB/s   โ”‚ 26.43 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 128 B         โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   33.35 ยตs      โ”‚ 41.93 ยตs      โ”‚ 36.74 ยตs      โ”‚ 36.01 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          29.4 GiB/s    โ”‚ 23.39 GiB/s   โ”‚ 26.69 GiB/s   โ”‚ 27.23 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 256 B         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   1.034 ms      โ”‚ 2.273 ms      โ”‚ 1.094 ms      โ”‚ 1.173 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          16.04 GiB/s   โ”‚ 7.301 GiB/s   โ”‚ 15.17 GiB/s   โ”‚ 14.14 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            16 B        โ”‚ 16 B          โ”‚ 16 B          โ”‚ 16 B          โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   941.6 ยตs      โ”‚ 1.658 ms      โ”‚ 1.009 ms      โ”‚ 1.027 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          17.11 GiB/s   โ”‚ 9.713 GiB/s   โ”‚ 15.96 GiB/s   โ”‚ 15.67 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 32 B          โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   965.5 ยตs      โ”‚ 1.552 ms      โ”‚ 1.009 ms      โ”‚ 1.021 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          16.43 GiB/s   โ”‚ 10.22 GiB/s   โ”‚ 15.72 GiB/s   โ”‚ 15.52 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 64 B          โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  923.9 ยตs      โ”‚ 1.534 ms      โ”‚ 940.6 ยตs      โ”‚ 956.9 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          17.04 GiB/s   โ”‚ 10.26 GiB/s   โ”‚ 16.74 GiB/s   โ”‚ 16.45 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 128 B         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  926 ยตs        โ”‚ 1.843 ms      โ”‚ 946.9 ยตs      โ”‚ 990.5 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          16.93 GiB/s   โ”‚ 8.507 GiB/s   โ”‚ 16.56 GiB/s   โ”‚ 15.83 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 256 B         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   2.665 ms      โ”‚ 3.902 ms      โ”‚ 2.914 ms      โ”‚ 2.927 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          12.45 GiB/s   โ”‚ 8.507 GiB/s   โ”‚ 11.39 GiB/s   โ”‚ 11.34 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            16 B        โ”‚ 16 B          โ”‚ 16 B          โ”‚ 16 B          โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   1.934 ms      โ”‚ 2.755 ms      โ”‚ 2.049 ms      โ”‚ 2.076 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          16.66 GiB/s   โ”‚ 11.69 GiB/s   โ”‚ 15.72 GiB/s   โ”‚ 15.52 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 32 B          โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   1.845 ms      โ”‚ 2.32 ms       โ”‚ 1.94 ms       โ”‚ 1.944 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          17.19 GiB/s   โ”‚ 13.67 GiB/s   โ”‚ 16.35 GiB/s   โ”‚ 16.31 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 64 B          โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  1.847 ms      โ”‚ 2.436 ms      โ”‚ 1.914 ms      โ”‚ 1.942 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          17.05 GiB/s   โ”‚ 12.92 GiB/s   โ”‚ 16.45 GiB/s   โ”‚ 16.21 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 128 B         โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.777 ms      โ”‚ 2.306 ms      โ”‚ 1.834 ms      โ”‚ 1.841 ms      โ”‚ 100     โ”‚ 100
                                              17.65 GiB/s   โ”‚ 13.6 GiB/s    โ”‚ 17.1 GiB/s    โ”‚ 17.04 GiB/s   โ”‚         โ”‚
                                              max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                                128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚
                                              alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                                128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚
                                              dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
                                                256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 256 B         โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Encoding with `rayon` data-parallelism, also using AVX2 intrinsics for faster vector x scalar multiplication

Timer precision: 23 ns
full_rlnc_encoder                             fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ encode                                                   โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    185.7 ยตs      โ”‚ 1.688 ms      โ”‚ 226.5 ยตs      โ”‚ 277.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          5.584 GiB/s   โ”‚ 629.2 MiB/s   โ”‚ 4.579 GiB/s   โ”‚ 3.736 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 2.68          โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 607.5 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 3.73          โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.6 KiB      โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3.07          โ”‚         โ”‚
   โ”‚                                            128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”‚                                          grow:         โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                            0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 2.56 B        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    54.8 ยตs       โ”‚ 169.4 ยตs      โ”‚ 93.37 ยตs      โ”‚ 96.09 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          18.37 GiB/s   โ”‚ 5.942 GiB/s   โ”‚ 10.78 GiB/s   โ”‚ 10.48 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 94.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.09 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    54.04 ยตs      โ”‚ 220.4 ยตs      โ”‚ 96.38 ยตs      โ”‚ 102.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          18.35 GiB/s   โ”‚ 4.499 GiB/s   โ”‚ 10.29 GiB/s   โ”‚ 9.706 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 143.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.14 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   44.13 ยตs      โ”‚ 667.3 ยตs      โ”‚ 103 ยตs        โ”‚ 107.2 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          22.3 GiB/s    โ”‚ 1.475 GiB/s   โ”‚ 9.554 GiB/s   โ”‚ 9.175 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 286.4 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.28 KiB      โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   45.19 ยตs      โ”‚ 792.5 ยตs      โ”‚ 109.4 ยตs      โ”‚ 132 ยตs        โ”‚ 100     โ”‚ 100
   โ”‚                                          21.7 GiB/s    โ”‚ 1.237 GiB/s   โ”‚ 8.959 GiB/s   โ”‚ 7.429 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            512 B       โ”‚ 512 B         โ”‚ 512 B         โ”‚ 527.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.515 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            8.251 KiB   โ”‚ 8.251 KiB     โ”‚ 8.251 KiB     โ”‚ 8.251 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   4.305 ms      โ”‚ 8.177 ms      โ”‚ 4.703 ms      โ”‚ 4.741 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          3.855 GiB/s   โ”‚ 2.03 GiB/s    โ”‚ 3.529 GiB/s   โ”‚ 3.501 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 62.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   2.63 ms       โ”‚ 3.415 ms      โ”‚ 2.963 ms      โ”‚ 2.982 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          6.126 GiB/s   โ”‚ 4.718 GiB/s   โ”‚ 5.437 GiB/s   โ”‚ 5.403 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 94.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   1.153 ms      โ”‚ 1.697 ms      โ”‚ 1.273 ms      โ”‚ 1.273 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          13.76 GiB/s   โ”‚ 9.347 GiB/s   โ”‚ 12.46 GiB/s   โ”‚ 12.45 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 143.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  743.5 ยตs      โ”‚ 1.294 ms      โ”‚ 862 ยตs        โ”‚ 880.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          21.17 GiB/s   โ”‚ 12.16 GiB/s   โ”‚ 18.26 GiB/s   โ”‚ 17.88 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 286.4 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  586.7 ยตs      โ”‚ 1.195 ms      โ”‚ 670.4 ยตs      โ”‚ 684.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          26.73 GiB/s   โ”‚ 13.12 GiB/s   โ”‚ 23.39 GiB/s   โ”‚ 22.91 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            512 B       โ”‚ 512 B         โ”‚ 512 B         โ”‚ 527.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.51 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   12.81 ms      โ”‚ 14.98 ms      โ”‚ 13.78 ms      โ”‚ 13.75 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          2.591 GiB/s   โ”‚ 2.216 GiB/s   โ”‚ 2.409 GiB/s   โ”‚ 2.414 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 62.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   8.681 ms      โ”‚ 11.02 ms      โ”‚ 9.191 ms      โ”‚ 9.226 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          3.712 GiB/s   โ”‚ 2.924 GiB/s   โ”‚ 3.506 GiB/s   โ”‚ 3.492 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 94.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   4.778 ms      โ”‚ 6.972 ms      โ”‚ 5.617 ms      โ”‚ 5.632 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          6.642 GiB/s   โ”‚ 4.552 GiB/s   โ”‚ 5.65 GiB/s    โ”‚ 5.635 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 143.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  2.21 ms       โ”‚ 3.055 ms      โ”‚ 2.433 ms      โ”‚ 2.444 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          14.24 GiB/s   โ”‚ 10.3 GiB/s    โ”‚ 12.94 GiB/s   โ”‚ 12.88 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 286.4 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.386 ms      โ”‚ 2.209 ms      โ”‚ 1.629 ms      โ”‚ 1.619 ms      โ”‚ 100     โ”‚ 100
                                              22.62 GiB/s   โ”‚ 14.2 GiB/s    โ”‚ 19.25 GiB/s   โ”‚ 19.37 GiB/s   โ”‚         โ”‚
                                              max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
                                                512 B       โ”‚ 512 B         โ”‚ 512 B         โ”‚ 527.2 B       โ”‚         โ”‚
                                              alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
                                                128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚
                                              dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
                                                256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚

Full RLNC Recoder

# Recoding with AVX2-powered SIMD vector x scalar multiplication

Timer precision: 14 ns
full_rlnc_recoder                                                       fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ recode                                                                             โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      22.06 ยตs      โ”‚ 37.4 ยตs       โ”‚ 25.77 ยตs      โ”‚ 26.23 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    24.89 GiB/s   โ”‚ 14.69 GiB/s   โ”‚ 21.32 GiB/s   โ”‚ 20.94 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     19.39 ยตs      โ”‚ 27.08 ยตs      โ”‚ 22.65 ยตs      โ”‚ 22.32 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    26.77 GiB/s   โ”‚ 19.17 GiB/s   โ”‚ 22.92 GiB/s   โ”‚ 23.26 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      64.09 KiB   โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      64.09 KiB   โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     17.73 ยตs      โ”‚ 22.41 ยตs      โ”‚ 18.54 ยตs      โ”‚ 18.53 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    28.5 GiB/s    โ”‚ 22.55 GiB/s   โ”‚ 27.26 GiB/s   โ”‚ 27.28 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      32.18 KiB   โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      32.18 KiB   โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    23.28 ยตs      โ”‚ 38.67 ยตs      โ”‚ 24.12 ยตs      โ”‚ 24.57 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    21.63 GiB/s   โ”‚ 13.02 GiB/s   โ”‚ 20.87 GiB/s   โ”‚ 20.49 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      16.37 KiB   โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      16.37 KiB   โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   44.62 ยตs      โ”‚ 60.58 ยตs      โ”‚ 46.58 ยตs      โ”‚ 47.26 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    11.71 GiB/s   โ”‚ 8.631 GiB/s   โ”‚ 11.22 GiB/s   โ”‚ 11.06 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      8.751 KiB   โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      8.751 KiB   โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     544.1 ยตs      โ”‚ 852.5 ยตs      โ”‚ 609.4 ยตs      โ”‚ 609.9 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    16.15 GiB/s   โ”‚ 10.3 GiB/s    โ”‚ 14.42 GiB/s   โ”‚ 14.41 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    471.7 ยตs      โ”‚ 616.5 ยตs      โ”‚ 519.6 ยตs      โ”‚ 522.2 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    17.59 GiB/s   โ”‚ 13.46 GiB/s   โ”‚ 15.97 GiB/s   โ”‚ 15.89 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    398.5 ยตs      โ”‚ 587.5 ยตs      โ”‚ 464.5 ยตs      โ”‚ 466.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    20.22 GiB/s   โ”‚ 13.71 GiB/s   โ”‚ 17.34 GiB/s   โ”‚ 17.28 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   427.6 ยตs      โ”‚ 567.9 ยตs      โ”‚ 465.8 ยตs      โ”‚ 467.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    18.57 GiB/s   โ”‚ 13.98 GiB/s   โ”‚ 17.04 GiB/s   โ”‚ 16.97 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      256.3 KiB   โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      256.3 KiB   โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  423.1 ยตs      โ”‚ 718.2 ยตs      โ”‚ 490.6 ยตs      โ”‚ 494.2 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    18.67 GiB/s   โ”‚ 11 GiB/s      โ”‚ 16.1 GiB/s    โ”‚ 15.99 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128.7 KiB   โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128.7 KiB   โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     1.234 ms      โ”‚ 1.604 ms      โ”‚ 1.371 ms      โ”‚ 1.374 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    14.23 GiB/s   โ”‚ 10.95 GiB/s   โ”‚ 12.81 GiB/s   โ”‚ 12.78 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    1.112 ms      โ”‚ 1.525 ms      โ”‚ 1.192 ms      โ”‚ 1.194 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    14.91 GiB/s   โ”‚ 10.88 GiB/s   โ”‚ 13.92 GiB/s   โ”‚ 13.89 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    942.5 ยตs      โ”‚ 1.109 ms      โ”‚ 1.019 ms      โ”‚ 1.017 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    17.09 GiB/s   โ”‚ 14.51 GiB/s   โ”‚ 15.81 GiB/s   โ”‚ 15.83 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   935.7 ยตs      โ”‚ 1.266 ms      โ”‚ 990.8 ยตs      โ”‚ 994.9 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    16.96 GiB/s   โ”‚ 12.53 GiB/s   โ”‚ 16.02 GiB/s   โ”‚ 15.95 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.3 KiB   โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.3 KiB   โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  969.1 ยตs      โ”‚ 1.437 ms      โ”‚ 1.006 ms      โ”‚ 1.015 ms      โ”‚ 100     โ”‚ 100
                                                                        16.28 GiB/s   โ”‚ 10.97 GiB/s   โ”‚ 15.67 GiB/s   โ”‚ 15.53 GiB/s   โ”‚         โ”‚
                                                                        max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
                                                                          256.7 KiB   โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚         โ”‚
                                                                        alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
                                                                          256.7 KiB   โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚         โ”‚
                                                                        dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
                                                                          128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Recoding with `rayon` data-parallelism, also using AVX2 intrinsics for faster vector x scalar multiplication

Timer precision: 25 ns
full_rlnc_recoder                                                       fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ recode                                                                             โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      79.71 ยตs      โ”‚ 314.3 ยตs      โ”‚ 165.7 ยตs      โ”‚ 169.8 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    6.892 GiB/s   โ”‚ 1.747 GiB/s   โ”‚ 3.314 GiB/s   โ”‚ 3.234 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      48 B        โ”‚ 48 B          โ”‚ 48 B          โ”‚ 63.2 B        โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      192 KiB     โ”‚ 192 KiB       โ”‚ 192 KiB       โ”‚ 192 KiB       โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     93.73 ยตs      โ”‚ 452.7 ยตs      โ”‚ 248.6 ยตs      โ”‚ 264.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    5.54 GiB/s    โ”‚ 1.147 GiB/s   โ”‚ 2.088 GiB/s   โ”‚ 1.965 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      96 B        โ”‚ 96 B          โ”‚ 96 B          โ”‚ 126.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      64.09 KiB   โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚ 64.12 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      96.06 KiB   โ”‚ 96.06 KiB     โ”‚ 96.06 KiB     โ”‚ 96.06 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     91.63 ยตs      โ”‚ 789.7 ยตs      โ”‚ 211.5 ยตs      โ”‚ 234.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    5.517 GiB/s   โ”‚ 655.5 MiB/s   โ”‚ 2.39 GiB/s    โ”‚ 2.156 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      192 B       โ”‚ 192 B         โ”‚ 192 B         โ”‚ 207.2 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      32.18 KiB   โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚ 32.2 KiB      โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      48.12 KiB   โ”‚ 48.12 KiB     โ”‚ 48.12 KiB     โ”‚ 48.12 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    57.64 ยตs      โ”‚ 179.8 ยตs      โ”‚ 102 ยตs        โ”‚ 103.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    8.738 GiB/s   โ”‚ 2.8 GiB/s     โ”‚ 4.934 GiB/s   โ”‚ 4.86 GiB/s    โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      384 B       โ”‚ 384 B         โ”‚ 384 B         โ”‚ 414.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      16.37 KiB   โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚ 16.4 KiB      โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      24.25 KiB   โ”‚ 24.25 KiB     โ”‚ 24.25 KiB     โ”‚ 24.25 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   77.32 ยตs      โ”‚ 240.6 ยตs      โ”‚ 118.5 ยตs      โ”‚ 123.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    6.763 GiB/s   โ”‚ 2.172 GiB/s   โ”‚ 4.409 GiB/s   โ”‚ 4.235 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      768 B       โ”‚ 768 B         โ”‚ 768 B         โ”‚ 783.2 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      8.751 KiB   โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚ 8.766 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      12.5 KiB    โ”‚ 12.5 KiB      โ”‚ 12.5 KiB      โ”‚ 12.5 KiB      โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     1.964 ms      โ”‚ 3.789 ms      โ”‚ 2.371 ms      โ”‚ 2.424 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    4.473 GiB/s   โ”‚ 2.319 GiB/s   โ”‚ 3.706 GiB/s   โ”‚ 3.624 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      48 B        โ”‚ 48 B          โ”‚ 48 B          โ”‚ 63.2 B        โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      3 MiB       โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    1.716 ms      โ”‚ 2.756 ms      โ”‚ 1.914 ms      โ”‚ 1.958 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    4.836 GiB/s   โ”‚ 3.011 GiB/s   โ”‚ 4.337 GiB/s   โ”‚ 4.238 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      96 B        โ”‚ 96 B          โ”‚ 96 B          โ”‚ 126.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      1.5 MiB     โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    890.7 ยตs      โ”‚ 1.648 ms      โ”‚ 1.062 ms      โ”‚ 1.089 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    9.046 GiB/s   โ”‚ 4.887 GiB/s   โ”‚ 7.581 GiB/s   โ”‚ 7.399 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      1.671 KiB   โ”‚ 192 B         โ”‚ 192 B         โ”‚ 222.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      513.6 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.2 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      768.1 KiB   โ”‚ 768.1 KiB     โ”‚ 768.1 KiB     โ”‚ 768.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   609.9 ยตs      โ”‚ 1.144 ms      โ”‚ 763.9 ยตs      โ”‚ 787.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    13.02 GiB/s   โ”‚ 6.939 GiB/s   โ”‚ 10.39 GiB/s   โ”‚ 10.08 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      384 B       โ”‚ 384 B         โ”‚ 384 B         โ”‚ 414.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      256.3 KiB   โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚ 256.4 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      384.2 KiB   โ”‚ 384.2 KiB     โ”‚ 384.2 KiB     โ”‚ 384.2 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  593.1 ยตs      โ”‚ 1.428 ms      โ”‚ 716.2 ยตs      โ”‚ 770 ยตs        โ”‚ 100     โ”‚ 100
   โ”‚                                                                    13.32 GiB/s   โ”‚ 5.532 GiB/s   โ”‚ 11.03 GiB/s   โ”‚ 10.26 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      768 B       โ”‚ 768 B         โ”‚ 768 B         โ”‚ 783.2 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      128.7 KiB   โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      192.5 KiB   โ”‚ 192.5 KiB     โ”‚ 192.5 KiB     โ”‚ 192.5 KiB     โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     5.115 ms      โ”‚ 6.58 ms       โ”‚ 5.597 ms      โ”‚ 5.633 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    3.436 GiB/s   โ”‚ 2.671 GiB/s   โ”‚ 3.14 GiB/s    โ”‚ 3.12 GiB/s    โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      48 B        โ”‚ 48 B          โ”‚ 48 B          โ”‚ 78.4 B        โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      6 MiB       โ”‚ 6 MiB         โ”‚ 6 MiB         โ”‚ 6 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    4.446 ms      โ”‚ 5.619 ms      โ”‚ 4.831 ms      โ”‚ 4.889 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    3.733 GiB/s   โ”‚ 2.954 GiB/s   โ”‚ 3.436 GiB/s   โ”‚ 3.395 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      96 B        โ”‚ 96 B          โ”‚ 96 B          โ”‚ 126.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      3 MiB       โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    2.965 ms      โ”‚ 4.632 ms      โ”‚ 3.2 ms        โ”‚ 3.27 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                                                    5.433 GiB/s   โ”‚ 3.478 GiB/s   โ”‚ 5.035 GiB/s   โ”‚ 4.927 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      192 B       โ”‚ 192 B         โ”‚ 192 B         โ”‚ 222.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      1.5 MiB     โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   1.337 ms      โ”‚ 2.332 ms      โ”‚ 1.614 ms      โ”‚ 1.661 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    11.86 GiB/s   โ”‚ 6.807 GiB/s   โ”‚ 9.834 GiB/s   โ”‚ 9.557 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      384 B       โ”‚ 384 B         โ”‚ 384 B         โ”‚ 414.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      512.3 KiB   โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚ 512.4 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      768.2 KiB   โ”‚ 768.2 KiB     โ”‚ 768.2 KiB     โ”‚ 768.2 KiB     โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  990.8 ยตs      โ”‚ 2.347 ms      โ”‚ 1.249 ms      โ”‚ 1.286 ms      โ”‚ 100     โ”‚ 100
                                                                        15.92 GiB/s   โ”‚ 6.722 GiB/s   โ”‚ 12.63 GiB/s   โ”‚ 12.26 GiB/s   โ”‚         โ”‚
                                                                        max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
                                                                          768 B       โ”‚ 768 B         โ”‚ 768 B         โ”‚ 783.2 B       โ”‚         โ”‚
                                                                        alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
                                                                          256.7 KiB   โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚         โ”‚
                                                                        dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
                                                                          384.5 KiB   โ”‚ 384.5 KiB     โ”‚ 384.5 KiB     โ”‚ 384.5 KiB     โ”‚         โ”‚

Full RLNC Decoder

# Decoding with AVX2-powered SIMD vector x scalar multiplication

Timer precision: 18 ns
full_rlnc_decoder                             fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ decode                                                   โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    600 ยตs        โ”‚ 1.041 ms      โ”‚ 615.2 ยตs      โ”‚ 622.9 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          1.627 GiB/s   โ”‚ 960.8 MiB/s   โ”‚ 1.587 GiB/s   โ”‚ 1.568 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    1.18 ms       โ”‚ 1.629 ms      โ”‚ 1.201 ms      โ”‚ 1.207 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          847.6 MiB/s   โ”‚ 614.1 MiB/s   โ”‚ 833 MiB/s     โ”‚ 829.2 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    2.267 ms      โ”‚ 2.404 ms      โ”‚ 2.299 ms      โ”‚ 2.302 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          442.7 MiB/s   โ”‚ 417.5 MiB/s   โ”‚ 436.6 MiB/s   โ”‚ 436 MiB/s     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   5.296 ms      โ”‚ 5.583 ms      โ”‚ 5.333 ms      โ”‚ 5.338 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          191.7 MiB/s   โ”‚ 181.9 MiB/s   โ”‚ 190.4 MiB/s   โ”‚ 190.2 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   15.27 ms      โ”‚ 16.21 ms      โ”‚ 15.55 ms      โ”‚ 15.55 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          69.59 MiB/s   โ”‚ 65.54 MiB/s   โ”‚ 68.33 MiB/s   โ”‚ 68.32 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   16.4 ms       โ”‚ 20.56 ms      โ”‚ 16.97 ms      โ”‚ 17.08 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          975.5 MiB/s   โ”‚ 778.1 MiB/s   โ”‚ 942.4 MiB/s   โ”‚ 936.5 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   27.24 ms      โ”‚ 30.95 ms      โ”‚ 28.12 ms      โ”‚ 28.26 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          587.3 MiB/s   โ”‚ 516.8 MiB/s   โ”‚ 568.9 MiB/s   โ”‚ 566 MiB/s     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   49.54 ms      โ”‚ 62.7 ms       โ”‚ 49.74 ms      โ”‚ 50.23 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          323 MiB/s     โ”‚ 255.2 MiB/s   โ”‚ 321.6 MiB/s   โ”‚ 318.5 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  98.43 ms      โ”‚ 102.1 ms      โ”‚ 98.98 ms      โ”‚ 99.32 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          162.6 MiB/s   โ”‚ 156.7 MiB/s   โ”‚ 161.8 MiB/s   โ”‚ 161.2 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  201.8 ms      โ”‚ 209.3 ms      โ”‚ 202.7 ms      โ”‚ 203 ms        โ”‚ 100     โ”‚ 100
   โ”‚                                          79.58 MiB/s   โ”‚ 76.73 MiB/s   โ”‚ 79.21 MiB/s   โ”‚ 79.11 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   46.33 ms      โ”‚ 49.04 ms      โ”‚ 46.51 ms      โ”‚ 46.7 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                          690.5 MiB/s   โ”‚ 652.4 MiB/s   โ”‚ 687.8 MiB/s   โ”‚ 685.1 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   78.74 ms      โ”‚ 81.78 ms      โ”‚ 79.06 ms      โ”‚ 79.29 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          406.4 MiB/s   โ”‚ 391.2 MiB/s   โ”‚ 404.7 MiB/s   โ”‚ 403.5 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   132.4 ms      โ”‚ 137.6 ms      โ”‚ 132.9 ms      โ”‚ 133.3 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          241.5 MiB/s   โ”‚ 232.4 MiB/s   โ”‚ 240.7 MiB/s   โ”‚ 239.9 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  241.9 ms      โ”‚ 249.3 ms      โ”‚ 243.1 ms      โ”‚ 243.6 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          132.3 MiB/s   โ”‚ 128.4 MiB/s   โ”‚ 131.6 MiB/s   โ”‚ 131.4 MiB/s   โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  476 ms        โ”‚ 485.5 ms      โ”‚ 479.1 ms      โ”‚ 479.4 ms      โ”‚ 100     โ”‚ 100
                                              67.35 MiB/s   โ”‚ 66.03 MiB/s   โ”‚ 66.9 MiB/s    โ”‚ 66.87 MiB/s   โ”‚         โ”‚

On AWS EC2 m8g.large with Graviton4 CPU

Running benchmarks on Linux 6.8.0-1029-aws aarch64, compiled with rustc 1.89.0 (29483883e 2025-08-04).

Component Peak Median Throughput (default feature) Peak Median Throughput (parallel feature) Impact of number of pieces on performance
Full RLNC Encoder 19.73 GiB/s 12.95 GiB/s The number of pieces original data got split into has a minimal impact on the encoding speed.
Full RLNC Recoder 19.2 GiB/s 10.43 GiB/s Similar to the encoder, the recoder's performance remains largely consistent regardless of how many pieces the original data is split into.
Full RLNC Decoder 0.84 GiB/s Doesn't yet implement a parallel decoding mode As the number of pieces increases, the decoding time increases substantially, leading to a considerable drop in throughput. This indicates that decoding is the most computationally intensive part of the full RLNC scheme, and its performance is inversely proportional to the number of pieces.

In summary, the full RLNC implementation demonstrates excellent encoding and recoding speeds, consistently achieving GiB/s throughputs with minimal sensitivity to the number of data pieces. The parallel feature, leveraging Rust rayon data-parallelism framework, also provides good performance for both encoding and recoding. Whether you want to use that feature, completely depends on your usecase. However, decoding remains a much slower operation, with its performance significantly diminishing as the data is split into a greater number of pieces, and currently does not implement a parallel decoding algorithm.

Click to view detailed benchmark results ๐Ÿ‘‡

Full RLNC Encoder

# Encoding with NEON-powered SIMD vector x scalar multiplication

Timer precision: 30 ns
full_rlnc_encoder                             fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ encode                                                   โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    48.42 ยตs      โ”‚ 95.57 ยตs      โ”‚ 54.2 ยตs       โ”‚ 58.82 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          21.42 GiB/s   โ”‚ 10.85 GiB/s   โ”‚ 19.14 GiB/s   โ”‚ 17.63 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            16 B        โ”‚ 16 B          โ”‚ 16 B          โ”‚ 16 B          โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    48.87 ยตs      โ”‚ 79.4 ยตs       โ”‚ 51.04 ยตs      โ”‚ 56.78 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          20.6 GiB/s    โ”‚ 12.68 GiB/s   โ”‚ 19.73 GiB/s   โ”‚ 17.73 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 32 B          โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    49.69 ยตs      โ”‚ 79.63 ยตs      โ”‚ 51.64 ยตs      โ”‚ 57.23 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          19.96 GiB/s   โ”‚ 12.45 GiB/s   โ”‚ 19.2 GiB/s    โ”‚ 17.33 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 64 B          โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   50.13 ยตs      โ”‚ 83.67 ยตs      โ”‚ 51.43 ยตs      โ”‚ 57.33 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          19.63 GiB/s   โ”‚ 11.76 GiB/s   โ”‚ 19.13 GiB/s   โ”‚ 17.16 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 128 B         โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   50.62 ยตs      โ”‚ 80.58 ยตs      โ”‚ 52.07 ยตs      โ”‚ 57.94 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          19.37 GiB/s   โ”‚ 12.17 GiB/s   โ”‚ 18.83 GiB/s   โ”‚ 16.92 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 256 B         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   1.187 ms      โ”‚ 1.419 ms      โ”‚ 1.277 ms      โ”‚ 1.287 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          13.97 GiB/s   โ”‚ 11.69 GiB/s   โ”‚ 13 GiB/s      โ”‚ 12.89 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            16 B        โ”‚ 16 B          โ”‚ 16 B          โ”‚ 16 B          โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   1.111 ms      โ”‚ 1.316 ms      โ”‚ 1.231 ms      โ”‚ 1.233 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          14.49 GiB/s   โ”‚ 12.23 GiB/s   โ”‚ 13.08 GiB/s   โ”‚ 13.06 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 32 B          โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   1.171 ms      โ”‚ 1.281 ms      โ”‚ 1.219 ms      โ”‚ 1.219 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          13.55 GiB/s   โ”‚ 12.38 GiB/s   โ”‚ 13.01 GiB/s   โ”‚ 13.01 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 64 B          โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  1.16 ms       โ”‚ 1.254 ms      โ”‚ 1.21 ms       โ”‚ 1.21 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                          13.57 GiB/s   โ”‚ 12.55 GiB/s   โ”‚ 13 GiB/s      โ”‚ 13 GiB/s      โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 128 B         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  1.125 ms      โ”‚ 1.302 ms      โ”‚ 1.175 ms      โ”‚ 1.179 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          13.93 GiB/s   โ”‚ 12.04 GiB/s   โ”‚ 13.34 GiB/s   โ”‚ 13.29 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 256 B         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   2.405 ms      โ”‚ 3.332 ms      โ”‚ 2.653 ms      โ”‚ 2.663 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          13.8 GiB/s    โ”‚ 9.962 GiB/s   โ”‚ 12.51 GiB/s   โ”‚ 12.46 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            16 B        โ”‚ 16 B          โ”‚ 16 B          โ”‚ 16 B          โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   2.388 ms      โ”‚ 2.928 ms      โ”‚ 2.569 ms      โ”‚ 2.602 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          13.49 GiB/s   โ”‚ 11 GiB/s      โ”‚ 12.54 GiB/s   โ”‚ 12.38 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 32 B          โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   2.416 ms      โ”‚ 2.704 ms      โ”‚ 2.487 ms      โ”‚ 2.492 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          13.13 GiB/s   โ”‚ 11.73 GiB/s   โ”‚ 12.75 GiB/s   โ”‚ 12.73 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 64 B          โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  2.442 ms      โ”‚ 2.596 ms      โ”‚ 2.501 ms      โ”‚ 2.501 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          12.89 GiB/s   โ”‚ 12.12 GiB/s   โ”‚ 12.59 GiB/s   โ”‚ 12.58 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                            256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 128 B         โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  2.453 ms      โ”‚ 2.734 ms      โ”‚ 2.499 ms      โ”‚ 2.508 ms      โ”‚ 100     โ”‚ 100
                                              12.78 GiB/s   โ”‚ 11.47 GiB/s   โ”‚ 12.54 GiB/s   โ”‚ 12.5 GiB/s    โ”‚         โ”‚
                                              max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                                128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚
                                              alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                                128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚
                                              dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
                                                256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 256 B         โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Encoding with `rayon` data-parallelism, also using NEON intrinsics for faster vector x scalar multiplication

Timer precision: 29 ns
full_rlnc_encoder                             fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ encode                                                   โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    293.3 ยตs      โ”‚ 586.2 ยตs      โ”‚ 312.7 ยตs      โ”‚ 315.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          3.537 GiB/s   โ”‚ 1.77 GiB/s    โ”‚ 3.317 GiB/s   โ”‚ 3.29 GiB/s    โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 28            โ”‚ 1             โ”‚ 1.28          โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 8.89 KiB      โ”‚ 32 B          โ”‚ 137.9 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 34            โ”‚ 2             โ”‚ 2.33          โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 73.28 KiB     โ”‚ 64.03 KiB     โ”‚ 64.13 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 10            โ”‚ 3             โ”‚ 3.07          โ”‚         โ”‚
   โ”‚                                            128 KiB     โ”‚ 128.5 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    86.27 ยตs      โ”‚ 139.5 ยตs      โ”‚ 117 ยตs        โ”‚ 113.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          11.67 GiB/s   โ”‚ 7.218 GiB/s   โ”‚ 8.606 GiB/s   โ”‚ 8.903 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 94.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.09 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    63.67 ยตs      โ”‚ 99.71 ยตs      โ”‚ 94.41 ยตs      โ”‚ 87.67 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          15.57 GiB/s   โ”‚ 9.947 GiB/s   โ”‚ 10.5 GiB/s    โ”‚ 11.31 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 143.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.14 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   61.64 ยตs      โ”‚ 91.68 ยตs      โ”‚ 78.71 ยตs      โ”‚ 75.94 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          15.97 GiB/s   โ”‚ 10.73 GiB/s   โ”‚ 12.5 GiB/s    โ”‚ 12.96 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 286.4 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.28 KiB      โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   60.71 ยตs      โ”‚ 89.44 ยตs      โ”‚ 75.68 ยตs      โ”‚ 75.35 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                          16.15 GiB/s   โ”‚ 10.96 GiB/s   โ”‚ 12.95 GiB/s   โ”‚ 13.01 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            512 B       โ”‚ 512 B         โ”‚ 512 B         โ”‚ 527.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.515 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            8.251 KiB   โ”‚ 8.251 KiB     โ”‚ 8.251 KiB     โ”‚ 8.251 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   4.133 ms      โ”‚ 6.11 ms       โ”‚ 4.273 ms      โ”‚ 4.311 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          4.016 GiB/s   โ”‚ 2.716 GiB/s   โ”‚ 3.885 GiB/s   โ”‚ 3.85 GiB/s    โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 62.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   1.894 ms      โ”‚ 2.374 ms      โ”‚ 1.928 ms      โ”‚ 1.936 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          8.507 GiB/s   โ”‚ 6.785 GiB/s   โ”‚ 8.355 GiB/s   โ”‚ 8.322 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1.5           โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 824 B         โ”‚ 94.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2.5           โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512.8 KiB     โ”‚ 512 KiB       โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   1.526 ms      โ”‚ 2.026 ms      โ”‚ 1.58 ms       โ”‚ 1.585 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          10.39 GiB/s   โ”‚ 7.83 GiB/s    โ”‚ 10.04 GiB/s   โ”‚ 10 GiB/s      โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 143.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  1.401 ms      โ”‚ 2.082 ms      โ”‚ 1.441 ms      โ”‚ 1.449 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          11.23 GiB/s   โ”‚ 7.562 GiB/s   โ”‚ 10.92 GiB/s   โ”‚ 10.86 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 286.4 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  1.314 ms      โ”‚ 2.428 ms      โ”‚ 1.363 ms      โ”‚ 1.393 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          11.93 GiB/s   โ”‚ 6.459 GiB/s   โ”‚ 11.5 GiB/s    โ”‚ 11.25 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            512 B       โ”‚ 512 B         โ”‚ 512 B         โ”‚ 527.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.51 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   13.55 ms      โ”‚ 15.75 ms      โ”‚ 14.09 ms      โ”‚ 14.11 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          2.448 GiB/s   โ”‚ 2.108 GiB/s   โ”‚ 2.356 GiB/s   โ”‚ 2.352 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            32 B        โ”‚ 32 B          โ”‚ 32 B          โ”‚ 62.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   5.465 ms      โ”‚ 5.93 ms       โ”‚ 5.64 ms       โ”‚ 5.647 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          5.896 GiB/s   โ”‚ 5.434 GiB/s   โ”‚ 5.713 GiB/s   โ”‚ 5.706 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            64 B        โ”‚ 64 B          โ”‚ 64 B          โ”‚ 94.4 B        โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   3.184 ms      โ”‚ 3.789 ms      โ”‚ 3.23 ms       โ”‚ 3.237 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          9.966 GiB/s   โ”‚ 8.374 GiB/s   โ”‚ 9.825 GiB/s   โ”‚ 9.803 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
   โ”‚                                            128 B       โ”‚ 128 B         โ”‚ 128 B         โ”‚ 143.2 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  2.812 ms      โ”‚ 2.909 ms      โ”‚ 2.869 ms      โ”‚ 2.867 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          11.19 GiB/s   โ”‚ 10.82 GiB/s   โ”‚ 10.97 GiB/s   โ”‚ 10.98 GiB/s   โ”‚         โ”‚
   โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
   โ”‚                                            256 B       โ”‚ 256 B         โ”‚ 256 B         โ”‚ 286.4 B       โ”‚         โ”‚
   โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                            256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                            3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                            512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  2.765 ms      โ”‚ 2.871 ms      โ”‚ 2.823 ms      โ”‚ 2.825 ms      โ”‚ 100     โ”‚ 100
                                              11.34 GiB/s   โ”‚ 10.92 GiB/s   โ”‚ 11.11 GiB/s   โ”‚ 11.1 GiB/s    โ”‚         โ”‚
                                              max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
                                                512 B       โ”‚ 512 B         โ”‚ 512 B         โ”‚ 527.2 B       โ”‚         โ”‚
                                              alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
                                                128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚
                                              dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
                                                256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚

Full RLNC Recoder

# Recoding with NEON-powered SIMD vector x scalar multiplication

Timer precision: 30 ns
full_rlnc_recoder                                                       fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ recode                                                                             โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      27.49 ยตs      โ”‚ 41.84 ยตs      โ”‚ 28.61 ยตs      โ”‚ 29.38 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    19.98 GiB/s   โ”‚ 13.13 GiB/s   โ”‚ 19.2 GiB/s    โ”‚ 18.69 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      64.03 KiB   โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     24.3 ยตs       โ”‚ 43.78 ยตs      โ”‚ 36.83 ยตs      โ”‚ 33.03 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    21.36 GiB/s   โ”‚ 11.86 GiB/s   โ”‚ 14.09 GiB/s   โ”‚ 15.72 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      64.09 KiB   โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      64.09 KiB   โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      32.06 KiB   โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     25.18 ยตs      โ”‚ 44.22 ยตs      โ”‚ 38.97 ยตs      โ”‚ 34.28 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    20.07 GiB/s   โ”‚ 11.43 GiB/s   โ”‚ 12.97 GiB/s   โ”‚ 14.74 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      32.18 KiB   โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      32.18 KiB   โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      16.12 KiB   โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚ 16.12 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    32.77 ยตs      โ”‚ 50.62 ยตs      โ”‚ 41.25 ยตs      โ”‚ 40.07 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    15.36 GiB/s   โ”‚ 9.95 GiB/s    โ”‚ 12.21 GiB/s   โ”‚ 12.56 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      16.37 KiB   โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      16.37 KiB   โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      8.25 KiB    โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚ 8.25 KiB      โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   57.61 ยตs      โ”‚ 74.53 ยตs      โ”‚ 59.79 ยตs      โ”‚ 62.69 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    9.076 GiB/s   โ”‚ 7.016 GiB/s   โ”‚ 8.745 GiB/s   โ”‚ 8.341 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      8.751 KiB   โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      8.751 KiB   โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      4.5 KiB     โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚ 4.5 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     546.8 ยตs      โ”‚ 692.2 ยตs      โ”‚ 648.8 ยตs      โ”‚ 649.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    16.07 GiB/s   โ”‚ 12.69 GiB/s   โ”‚ 13.54 GiB/s   โ”‚ 13.53 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    554.7 ยตs      โ”‚ 660.2 ยตs      โ”‚ 610.1 ยตs      โ”‚ 605.5 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    14.96 GiB/s   โ”‚ 12.57 GiB/s   โ”‚ 13.6 GiB/s    โ”‚ 13.7 GiB/s    โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    534.3 ยตs      โ”‚ 631.3 ยตs      โ”‚ 599.2 ยตs      โ”‚ 596.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    15.08 GiB/s   โ”‚ 12.76 GiB/s   โ”‚ 13.44 GiB/s   โ”‚ 13.5 GiB/s    โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   563.4 ยตs      โ”‚ 651.1 ยตs      โ”‚ 606.2 ยตs      โ”‚ 604.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    14.09 GiB/s   โ”‚ 12.19 GiB/s   โ”‚ 13.1 GiB/s    โ”‚ 13.13 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      256.3 KiB   โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      256.3 KiB   โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  564.6 ยตs      โ”‚ 636.5 ยตs      โ”‚ 610.1 ยตs      โ”‚ 606.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    13.99 GiB/s   โ”‚ 12.41 GiB/s   โ”‚ 12.95 GiB/s   โ”‚ 13.04 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128.7 KiB   โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      128.7 KiB   โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      64.5 KiB    โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚ 64.5 KiB      โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     1.215 ms      โ”‚ 1.469 ms      โ”‚ 1.394 ms      โ”‚ 1.39 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                                                    14.46 GiB/s   โ”‚ 11.96 GiB/s   โ”‚ 12.6 GiB/s    โ”‚ 12.64 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    1.163 ms      โ”‚ 1.411 ms      โ”‚ 1.258 ms      โ”‚ 1.259 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    14.27 GiB/s   โ”‚ 11.75 GiB/s   โ”‚ 13.19 GiB/s   โ”‚ 13.18 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    1.068 ms      โ”‚ 1.256 ms      โ”‚ 1.198 ms      โ”‚ 1.194 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    15.08 GiB/s   โ”‚ 12.82 GiB/s   โ”‚ 13.44 GiB/s   โ”‚ 13.48 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      512.1 KiB   โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚ 512.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   1.161 ms      โ”‚ 1.43 ms       โ”‚ 1.214 ms      โ”‚ 1.22 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                                                    13.66 GiB/s   โ”‚ 11.09 GiB/s   โ”‚ 13.07 GiB/s   โ”‚ 13 GiB/s      โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.3 KiB   โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
   โ”‚                                                                      512.3 KiB   โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
   โ”‚                                                                      256.2 KiB   โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚ 256.2 KiB     โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  1.191 ms      โ”‚ 1.275 ms      โ”‚ 1.214 ms      โ”‚ 1.216 ms      โ”‚ 100     โ”‚ 100
                                                                        13.23 GiB/s   โ”‚ 12.37 GiB/s   โ”‚ 12.98 GiB/s   โ”‚ 12.96 GiB/s   โ”‚         โ”‚
                                                                        max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
                                                                          256.7 KiB   โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚         โ”‚
                                                                        alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          4           โ”‚ 4             โ”‚ 4             โ”‚ 4             โ”‚         โ”‚
                                                                          256.7 KiB   โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚         โ”‚
                                                                        dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          3           โ”‚ 3             โ”‚ 3             โ”‚ 3             โ”‚         โ”‚
                                                                          128.5 KiB   โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚ 128.5 KiB     โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Recoding with `rayon` data-parallelism, also using NEON intrinsics for faster vector x scalar multiplication

Timer precision: 30 ns
full_rlnc_recoder                                                       fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ recode                                                                             โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      62.72 ยตs      โ”‚ 113.7 ยตs      โ”‚ 76.8 ยตs       โ”‚ 78.65 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    8.759 GiB/s   โ”‚ 4.828 GiB/s   โ”‚ 7.154 GiB/s   โ”‚ 6.985 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      48 B        โ”‚ 48 B          โ”‚ 48 B          โ”‚ 63.2 B        โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      192 KiB     โ”‚ 192 KiB       โ”‚ 192 KiB       โ”‚ 192 KiB       โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     60.66 ยตs      โ”‚ 106.2 ยตs      โ”‚ 91.03 ยตs      โ”‚ 88.24 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    8.56 GiB/s    โ”‚ 4.889 GiB/s   โ”‚ 5.704 GiB/s   โ”‚ 5.885 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      96 B        โ”‚ 96 B          โ”‚ 96 B          โ”‚ 126.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      64.09 KiB   โ”‚ 64.09 KiB     โ”‚ 64.09 KiB     โ”‚ 64.12 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      96.06 KiB   โ”‚ 96.06 KiB     โ”‚ 96.06 KiB     โ”‚ 96.06 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     50.34 ยตs      โ”‚ 87.71 ยตs      โ”‚ 69.52 ยตs      โ”‚ 70.19 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    10.04 GiB/s   โ”‚ 5.763 GiB/s   โ”‚ 7.271 GiB/s   โ”‚ 7.202 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      192 B       โ”‚ 192 B         โ”‚ 192 B         โ”‚ 207.2 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      32.18 KiB   โ”‚ 32.18 KiB     โ”‚ 32.18 KiB     โ”‚ 32.2 KiB      โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      48.12 KiB   โ”‚ 48.12 KiB     โ”‚ 48.12 KiB     โ”‚ 48.12 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    51.52 ยตs      โ”‚ 80.65 ยตs      โ”‚ 66 ยตs         โ”‚ 66.44 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    9.775 GiB/s   โ”‚ 6.245 GiB/s   โ”‚ 7.631 GiB/s   โ”‚ 7.58 GiB/s    โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      384 B       โ”‚ 384 B         โ”‚ 384 B         โ”‚ 414.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      16.37 KiB   โ”‚ 16.37 KiB     โ”‚ 16.37 KiB     โ”‚ 16.4 KiB      โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      24.25 KiB   โ”‚ 24.25 KiB     โ”‚ 24.25 KiB     โ”‚ 24.25 KiB     โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   74.76 ยตs      โ”‚ 104.8 ยตs      โ”‚ 87.53 ยตs      โ”‚ 87.52 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    6.995 GiB/s   โ”‚ 4.99 GiB/s    โ”‚ 5.974 GiB/s   โ”‚ 5.975 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      768 B       โ”‚ 768 B         โ”‚ 768 B         โ”‚ 783.2 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      8.751 KiB   โ”‚ 8.751 KiB     โ”‚ 8.751 KiB     โ”‚ 8.766 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      12.5 KiB    โ”‚ 12.5 KiB      โ”‚ 12.5 KiB      โ”‚ 12.5 KiB      โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     1.535 ms      โ”‚ 2.769 ms      โ”‚ 1.61 ms       โ”‚ 1.65 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                                                    5.722 GiB/s   โ”‚ 3.173 GiB/s   โ”‚ 5.456 GiB/s   โ”‚ 5.324 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      48 B        โ”‚ 48 B          โ”‚ 48 B          โ”‚ 63.2 B        โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      3 MiB       โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    1.291 ms      โ”‚ 2.089 ms      โ”‚ 1.35 ms       โ”‚ 1.384 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    6.427 GiB/s   โ”‚ 3.973 GiB/s   โ”‚ 6.147 GiB/s   โ”‚ 5.996 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2.5           โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      96 B        โ”‚ 96 B          โ”‚ 856 B         โ”‚ 126.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4.5           โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      1.5 MiB     โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    896.5 ยตs      โ”‚ 1.281 ms      โ”‚ 938 ยตs        โ”‚ 945.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    8.988 GiB/s   โ”‚ 6.287 GiB/s   โ”‚ 8.59 GiB/s    โ”‚ 8.52 GiB/s    โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 3             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      192 B       โ”‚ 1.671 KiB     โ”‚ 192 B         โ”‚ 222.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 5             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      512.1 KiB   โ”‚ 513.6 KiB     โ”‚ 512.1 KiB     โ”‚ 512.2 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      768.1 KiB   โ”‚ 768.1 KiB     โ”‚ 768.1 KiB     โ”‚ 768.1 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   786.4 ยตs      โ”‚ 1.679 ms      โ”‚ 825.5 ยตs      โ”‚ 873.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    10.09 GiB/s   โ”‚ 4.729 GiB/s   โ”‚ 9.621 GiB/s   โ”‚ 9.096 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      384 B       โ”‚ 384 B         โ”‚ 384 B         โ”‚ 414.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      256.3 KiB   โ”‚ 256.3 KiB     โ”‚ 256.3 KiB     โ”‚ 256.4 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      384.2 KiB   โ”‚ 384.2 KiB     โ”‚ 384.2 KiB     โ”‚ 384.2 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  755.4 ยตs      โ”‚ 1.283 ms      โ”‚ 786 ยตs        โ”‚ 831.8 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    10.46 GiB/s   โ”‚ 6.157 GiB/s   โ”‚ 10.05 GiB/s   โ”‚ 9.502 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
   โ”‚                                                                      768 B       โ”‚ 768 B         โ”‚ 768 B         โ”‚ 783.2 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
   โ”‚                                                                      128.7 KiB   โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚ 128.7 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      192.5 KiB   โ”‚ 192.5 KiB     โ”‚ 192.5 KiB     โ”‚ 192.5 KiB     โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     3.313 ms      โ”‚ 5.537 ms      โ”‚ 3.483 ms      โ”‚ 3.566 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    5.305 GiB/s   โ”‚ 3.174 GiB/s   โ”‚ 5.046 GiB/s   โ”‚ 4.928 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      48 B        โ”‚ 48 B          โ”‚ 48 B          โ”‚ 78.4 B        โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      6 MiB       โ”‚ 6 MiB         โ”‚ 6 MiB         โ”‚ 6 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    2.879 ms      โ”‚ 5.134 ms      โ”‚ 3.067 ms      โ”‚ 3.12 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                                                    5.765 GiB/s   โ”‚ 3.233 GiB/s   โ”‚ 5.413 GiB/s   โ”‚ 5.32 GiB/s    โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      96 B        โ”‚ 96 B          โ”‚ 96 B          โ”‚ 126.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      3 MiB       โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚ 3 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    1.922 ms      โ”‚ 3.468 ms      โ”‚ 1.996 ms      โ”‚ 2.021 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    8.381 GiB/s   โ”‚ 4.646 GiB/s   โ”‚ 8.073 GiB/s   โ”‚ 7.973 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2.5           โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      192 B       โ”‚ 192 B         โ”‚ 952 B         โ”‚ 222.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4.5           โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      1.5 MiB     โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚ 1.5 MiB       โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   1.556 ms      โ”‚ 2.314 ms      โ”‚ 1.599 ms      โ”‚ 1.628 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                    10.19 GiB/s   โ”‚ 6.86 GiB/s    โ”‚ 9.927 GiB/s   โ”‚ 9.747 GiB/s   โ”‚         โ”‚
   โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2.02          โ”‚         โ”‚
   โ”‚                                                                      384 B       โ”‚ 384 B         โ”‚ 384 B         โ”‚ 414.4 B       โ”‚         โ”‚
   โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      4           โ”‚ 4             โ”‚ 4             โ”‚ 4.02          โ”‚         โ”‚
   โ”‚                                                                      512.3 KiB   โ”‚ 512.3 KiB     โ”‚ 512.3 KiB     โ”‚ 512.4 KiB     โ”‚         โ”‚
   โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                      5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
   โ”‚                                                                      768.2 KiB   โ”‚ 768.2 KiB     โ”‚ 768.2 KiB     โ”‚ 768.2 KiB     โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  1.481 ms      โ”‚ 1.76 ms       โ”‚ 1.512 ms      โ”‚ 1.529 ms      โ”‚ 100     โ”‚ 100
                                                                        10.64 GiB/s   โ”‚ 8.963 GiB/s   โ”‚ 10.43 GiB/s   โ”‚ 10.31 GiB/s   โ”‚         โ”‚
                                                                        max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          2           โ”‚ 2             โ”‚ 2             โ”‚ 2.01          โ”‚         โ”‚
                                                                          768 B       โ”‚ 768 B         โ”‚ 768 B         โ”‚ 783.2 B       โ”‚         โ”‚
                                                                        alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          4           โ”‚ 4             โ”‚ 4             โ”‚ 4.01          โ”‚         โ”‚
                                                                          256.7 KiB   โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚ 256.7 KiB     โ”‚         โ”‚
                                                                        dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                          5           โ”‚ 5             โ”‚ 5             โ”‚ 5             โ”‚         โ”‚
                                                                          384.5 KiB   โ”‚ 384.5 KiB     โ”‚ 384.5 KiB     โ”‚ 384.5 KiB     โ”‚         โ”‚

Full RLNC Decoder

# Decoding with NEON-powered SIMD vector x scalar multiplication

Timer precision: 30 ns
full_rlnc_decoder                             fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ decode                                                   โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    1.124 ms      โ”‚ 1.409 ms      โ”‚ 1.163 ms      โ”‚ 1.165 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          889.4 MiB/s   โ”‚ 709.6 MiB/s   โ”‚ 859.6 MiB/s   โ”‚ 858.2 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    1.921 ms      โ”‚ 2.209 ms      โ”‚ 1.972 ms      โ”‚ 1.972 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          520.9 MiB/s   โ”‚ 453 MiB/s     โ”‚ 507.4 MiB/s   โ”‚ 507.3 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    3.873 ms      โ”‚ 3.94 ms       โ”‚ 3.896 ms      โ”‚ 3.896 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          259.1 MiB/s   โ”‚ 254.7 MiB/s   โ”‚ 257.6 MiB/s   โ”‚ 257.6 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   8.395 ms      โ”‚ 8.71 ms       โ”‚ 8.428 ms      โ”‚ 8.431 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          120.9 MiB/s   โ”‚ 116.6 MiB/s   โ”‚ 120.5 MiB/s   โ”‚ 120.4 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   21.13 ms      โ”‚ 21.46 ms      โ”‚ 21.18 ms      โ”‚ 21.18 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          50.28 MiB/s   โ”‚ 49.52 MiB/s   โ”‚ 50.16 MiB/s   โ”‚ 50.16 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   21.14 ms      โ”‚ 24.37 ms      โ”‚ 21.34 ms      โ”‚ 21.38 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          756.7 MiB/s   โ”‚ 656.3 MiB/s   โ”‚ 749.7 MiB/s   โ”‚ 748.3 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   41.03 ms      โ”‚ 42.49 ms      โ”‚ 41.52 ms      โ”‚ 41.56 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          389.9 MiB/s   โ”‚ 376.5 MiB/s   โ”‚ 385.3 MiB/s   โ”‚ 384.9 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   81.35 ms      โ”‚ 85.9 ms       โ”‚ 82.83 ms      โ”‚ 83.08 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          196.7 MiB/s   โ”‚ 186.2 MiB/s   โ”‚ 193.1 MiB/s   โ”‚ 192.6 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  161.9 ms      โ”‚ 181.5 ms      โ”‚ 165.3 ms      โ”‚ 165.9 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          98.92 MiB/s   โ”‚ 88.19 MiB/s   โ”‚ 96.88 MiB/s   โ”‚ 96.5 MiB/s    โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  318.8 ms      โ”‚ 337.4 ms      โ”‚ 326.3 ms      โ”‚ 326.7 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          50.38 MiB/s   โ”‚ 47.6 MiB/s    โ”‚ 49.22 MiB/s   โ”‚ 49.15 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   49.19 ms      โ”‚ 52.28 ms      โ”‚ 49.53 ms      โ”‚ 49.78 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          650.4 MiB/s   โ”‚ 611.9 MiB/s   โ”‚ 646 MiB/s     โ”‚ 642.8 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   88.63 ms      โ”‚ 94.25 ms      โ”‚ 89.37 ms      โ”‚ 89.7 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                          361 MiB/s     โ”‚ 339.5 MiB/s   โ”‚ 358 MiB/s     โ”‚ 356.7 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   169.7 ms      โ”‚ 176.9 ms      โ”‚ 171.7 ms      โ”‚ 172.1 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          188.5 MiB/s   โ”‚ 180.8 MiB/s   โ”‚ 186.3 MiB/s   โ”‚ 185.9 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  334.2 ms      โ”‚ 358.2 ms      โ”‚ 339.3 ms      โ”‚ 340.6 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                          95.77 MiB/s   โ”‚ 89.36 MiB/s   โ”‚ 94.35 MiB/s   โ”‚ 93.97 MiB/s   โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  672 ms        โ”‚ 728.8 ms      โ”‚ 688.9 ms      โ”‚ 691.1 ms      โ”‚ 100     โ”‚ 100
                                              47.7 MiB/s    โ”‚ 43.99 MiB/s   โ”‚ 46.54 MiB/s   โ”‚ 46.38 MiB/s   โ”‚         โ”‚

On AWS EC2 m7i.xlarge with Intel(R) Xeon(R) Platinum 8488C

Running benchmarks on Linux 6.14.0-1011-aws x86_64, compiled with rustc 1.89.0 (29483883e 2025-08-04).

Component Peak Median Throughput (default feature) Peak Median Throughput (parallel feature) Impact of number of pieces on performance
Full RLNC Encoder 48.36 GiB/s 16.01 GiB/s The number of pieces original data got split into has a minimal impact on the encoding speed.
Full RLNC Recoder 34.39 GiB/s 9.58 GiB/s Similar to the encoder, the recoder's performance remains largely consistent regardless of how many pieces the original data is split into.
Full RLNC Decoder 1.929 GiB/s Doesn't yet implement a parallel decoding mode As the number of pieces increases, the decoding time increases substantially, leading to a considerable drop in throughput. This indicates that decoding is the most computationally intensive part of the full RLNC scheme, and its performance is inversely proportional to the number of pieces.

In summary, the full RLNC implementation demonstrates excellent encoding and recoding speeds, consistently achieving GiB/s throughputs with minimal sensitivity to the number of data pieces. The parallel feature, leveraging Rust rayon data-parallelism framework, also provides good performance for both encoding and recoding. Whether you want to use that feature, completely depends on your usecase. However, decoding remains a much slower operation, with its performance significantly diminishing as the data is split into a greater number of pieces, and currently does not implement a parallel decoding algorithm.

Click to view detailed benchmark results ๐Ÿ‘‡

Full RLNC Encoder

# Encoding with AVX512-powered SIMD vector x scalar multiplication

Timer precision: 22 ns
full_rlnc_encoder                          fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ encode                                                โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces    24.81 ยตs      โ”‚ 86.67 ยตs      โ”‚ 28.54 ยตs      โ”‚ 30.06 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       41.81 GiB/s   โ”‚ 11.97 GiB/s   โ”‚ 36.35 GiB/s   โ”‚ 34.51 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces    27.74 ยตs      โ”‚ 77.13 ยตs      โ”‚ 29.69 ยตs      โ”‚ 31.56 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       36.29 GiB/s   โ”‚ 13.05 GiB/s   โ”‚ 33.92 GiB/s   โ”‚ 31.9 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces    19.87 ยตs      โ”‚ 38.22 ยตs      โ”‚ 20.5 ยตs       โ”‚ 22.56 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       49.91 GiB/s   โ”‚ 25.94 GiB/s   โ”‚ 48.36 GiB/s   โ”‚ 43.95 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces   20.26 ยตs      โ”‚ 45.07 ยตs      โ”‚ 25.4 ยตs       โ”‚ 26.44 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       48.58 GiB/s   โ”‚ 21.84 GiB/s   โ”‚ 38.75 GiB/s   โ”‚ 37.22 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces   24.89 ยตs      โ”‚ 41.05 ยตs      โ”‚ 25.31 ยตs      โ”‚ 26.52 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       39.39 GiB/s   โ”‚ 23.89 GiB/s   โ”‚ 38.74 GiB/s   โ”‚ 36.97 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces   775.1 ยตs      โ”‚ 1.759 ms      โ”‚ 827.3 ยตs      โ”‚ 851.2 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       21.41 GiB/s   โ”‚ 9.432 GiB/s   โ”‚ 20.06 GiB/s   โ”‚ 19.5 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces   611.6 ยตs      โ”‚ 1.477 ms      โ”‚ 661.9 ยตs      โ”‚ 681.1 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       26.34 GiB/s   โ”‚ 10.9 GiB/s    โ”‚ 24.34 GiB/s   โ”‚ 23.65 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces   625.1 ยตs      โ”‚ 1.524 ms      โ”‚ 665.5 ยตs      โ”‚ 687.9 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       25.38 GiB/s   โ”‚ 10.4 GiB/s    โ”‚ 23.84 GiB/s   โ”‚ 23.06 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces  633.9 ยตs      โ”‚ 1.388 ms      โ”‚ 669.5 ยตs      โ”‚ 686.8 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       24.84 GiB/s   โ”‚ 11.33 GiB/s   โ”‚ 23.51 GiB/s   โ”‚ 22.92 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces  629.4 ยตs      โ”‚ 1.431 ms      โ”‚ 659.2 ยตs      โ”‚ 680.6 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       24.92 GiB/s   โ”‚ 10.95 GiB/s   โ”‚ 23.79 GiB/s   โ”‚ 23.04 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces   2.324 ms      โ”‚ 4.714 ms      โ”‚ 2.541 ms      โ”‚ 2.583 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       14.28 GiB/s   โ”‚ 7.043 GiB/s   โ”‚ 13.06 GiB/s   โ”‚ 12.85 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces   1.634 ms      โ”‚ 3.483 ms      โ”‚ 1.771 ms      โ”‚ 1.821 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       19.71 GiB/s   โ”‚ 9.251 GiB/s   โ”‚ 18.19 GiB/s   โ”‚ 17.69 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces   1.32 ms       โ”‚ 3.311 ms      โ”‚ 1.446 ms      โ”‚ 1.502 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       24.03 GiB/s   โ”‚ 9.584 GiB/s   โ”‚ 21.94 GiB/s   โ”‚ 21.12 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces  1.296 ms      โ”‚ 3.297 ms      โ”‚ 1.351 ms      โ”‚ 1.41 ms       โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       24.29 GiB/s   โ”‚ 9.552 GiB/s   โ”‚ 23.3 GiB/s    โ”‚ 22.32 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.301 ms      โ”‚ 3.217 ms      โ”‚ 1.375 ms      โ”‚ 1.431 ms      โ”‚ 100     โ”‚ 100
โ”‚                                          24.11 GiB/s   โ”‚ 9.751 GiB/s   โ”‚ 22.81 GiB/s   โ”‚ 21.92 GiB/s   โ”‚         โ”‚
โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ•ฐโ”€ encode_zero_alloc                                     โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    23.6 ยตs       โ”‚ 44.12 ยตs      โ”‚ 25.18 ยตs      โ”‚ 26.42 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       43.95 GiB/s   โ”‚ 23.51 GiB/s   โ”‚ 41.2 GiB/s    โ”‚ 39.26 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    27.18 ยตs      โ”‚ 45.54 ยตs      โ”‚ 29.34 ยตs      โ”‚ 30.2 ยตs       โ”‚ 100     โ”‚ 100
   โ”‚                                       37.05 GiB/s   โ”‚ 22.11 GiB/s   โ”‚ 34.32 GiB/s   โ”‚ 33.34 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    19.74 ยตs      โ”‚ 42.11 ยตs      โ”‚ 20.98 ยตs      โ”‚ 22.42 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       50.22 GiB/s   โ”‚ 23.55 GiB/s   โ”‚ 47.25 GiB/s   โ”‚ 44.23 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   19.89 ยตs      โ”‚ 210.8 ยตs      โ”‚ 20.45 ยตs      โ”‚ 23.42 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       49.47 GiB/s   โ”‚ 4.668 GiB/s   โ”‚ 48.11 GiB/s   โ”‚ 42.01 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   20.25 ยตs      โ”‚ 34.5 ยตs       โ”‚ 20.64 ยตs      โ”‚ 22.15 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       48.42 GiB/s   โ”‚ 28.42 GiB/s   โ”‚ 47.51 GiB/s   โ”‚ 44.27 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   741.3 ยตs      โ”‚ 1.638 ms      โ”‚ 806.9 ยตs      โ”‚ 834.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       22.39 GiB/s   โ”‚ 10.12 GiB/s   โ”‚ 20.57 GiB/s   โ”‚ 19.88 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   625.9 ยตs      โ”‚ 1.386 ms      โ”‚ 666 ยตs        โ”‚ 688.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       25.74 GiB/s   โ”‚ 11.61 GiB/s   โ”‚ 24.19 GiB/s   โ”‚ 23.41 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   601.1 ยตs      โ”‚ 1.366 ms      โ”‚ 632.2 ยตs      โ”‚ 656.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       26.39 GiB/s   โ”‚ 11.61 GiB/s   โ”‚ 25.1 GiB/s    โ”‚ 24.17 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  603 ยตs        โ”‚ 1.534 ms      โ”‚ 630.8 ยตs      โ”‚ 657.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       26.11 GiB/s   โ”‚ 10.25 GiB/s   โ”‚ 24.96 GiB/s   โ”‚ 23.96 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  599.2 ยตs      โ”‚ 1.56 ms       โ”‚ 631.1 ยตs      โ”‚ 655.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       26.17 GiB/s   โ”‚ 10.05 GiB/s   โ”‚ 24.85 GiB/s   โ”‚ 23.92 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   2.268 ms      โ”‚ 3.968 ms      โ”‚ 2.562 ms      โ”‚ 2.596 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       14.63 GiB/s   โ”‚ 8.367 GiB/s   โ”‚ 12.95 GiB/s   โ”‚ 12.78 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   1.593 ms      โ”‚ 3.43 ms       โ”‚ 1.771 ms      โ”‚ 1.848 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       20.22 GiB/s   โ”‚ 9.395 GiB/s   โ”‚ 18.18 GiB/s   โ”‚ 17.43 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   1.284 ms      โ”‚ 3.278 ms      โ”‚ 1.364 ms      โ”‚ 1.426 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       24.71 GiB/s   โ”‚ 9.68 GiB/s    โ”‚ 23.26 GiB/s   โ”‚ 22.25 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  1.259 ms      โ”‚ 3.248 ms      โ”‚ 1.338 ms      โ”‚ 1.405 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       25.01 GiB/s   โ”‚ 9.696 GiB/s   โ”‚ 23.53 GiB/s   โ”‚ 22.41 GiB/s   โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.243 ms      โ”‚ 3.244 ms      โ”‚ 1.327 ms      โ”‚ 1.39 ms       โ”‚ 100     โ”‚ 100
                                           25.23 GiB/s   โ”‚ 9.67 GiB/s    โ”‚ 23.63 GiB/s   โ”‚ 22.55 GiB/s   โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Encoding with `rayon` data-parallelism, also using AVX512 intrinsics for faster vector x scalar multiplication

Timer precision: 22 ns
full_rlnc_encoder                          fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ encode                                                โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces    263.9 ยตs      โ”‚ 850.2 ยตs      โ”‚ 303.8 ยตs      โ”‚ 312.9 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       3.931 GiB/s   โ”‚ 1.22 GiB/s    โ”‚ 3.414 GiB/s   โ”‚ 3.315 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 48            โ”‚ 1             โ”‚ 1.48          โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 79.34 KiB     โ”‚ 64.01 KiB     โ”‚ 64.18 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 53            โ”‚ 1             โ”‚ 1.53          โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 79.71 KiB     โ”‚ 64.01 KiB     โ”‚ 64.18 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 9             โ”‚ 2             โ”‚ 2.07          โ”‚         โ”‚
โ”‚  โ”‚                                         128 KiB     โ”‚ 128.5 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces    98.18 ยตs      โ”‚ 346.5 ยตs      โ”‚ 120.4 ยตs      โ”‚ 125.2 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       10.25 GiB/s   โ”‚ 2.906 GiB/s   โ”‚ 8.363 GiB/s   โ”‚ 8.04 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces    83.89 ยตs      โ”‚ 125.9 ยตs      โ”‚ 101.7 ยตs      โ”‚ 102.5 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       11.82 GiB/s   โ”‚ 7.875 GiB/s   โ”‚ 9.753 GiB/s   โ”‚ 9.676 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces   61.12 ยตs      โ”‚ 98.06 ยตs      โ”‚ 74.59 ยตs      โ”‚ 75.06 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       16.1 GiB/s    โ”‚ 10.03 GiB/s   โ”‚ 13.19 GiB/s   โ”‚ 13.11 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces   44.85 ยตs      โ”‚ 103.5 ยตs      โ”‚ 62.03 ยตs      โ”‚ 62.54 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       21.86 GiB/s   โ”‚ 9.476 GiB/s   โ”‚ 15.81 GiB/s   โ”‚ 15.68 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces   3.699 ms      โ”‚ 10.36 ms      โ”‚ 4.724 ms      โ”‚ 4.874 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       4.487 GiB/s   โ”‚ 1.602 GiB/s   โ”‚ 3.514 GiB/s   โ”‚ 3.405 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces   2.681 ms      โ”‚ 3.693 ms      โ”‚ 3.114 ms      โ”‚ 3.146 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       6.008 GiB/s   โ”‚ 4.362 GiB/s   โ”‚ 5.173 GiB/s   โ”‚ 5.12 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces   1.576 ms      โ”‚ 2.269 ms      โ”‚ 1.899 ms      โ”‚ 1.891 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       10.06 GiB/s   โ”‚ 6.993 GiB/s   โ”‚ 8.355 GiB/s   โ”‚ 8.388 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces  1.04 ms       โ”‚ 1.601 ms      โ”‚ 1.274 ms      โ”‚ 1.281 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       15.13 GiB/s   โ”‚ 9.831 GiB/s   โ”‚ 12.35 GiB/s   โ”‚ 12.28 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces  846.1 ยตs      โ”‚ 1.505 ms      โ”‚ 979.4 ยตs      โ”‚ 1.003 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       18.53 GiB/s   โ”‚ 10.42 GiB/s   โ”‚ 16.01 GiB/s   โ”‚ 15.62 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces   12.98 ms      โ”‚ 16.63 ms      โ”‚ 14.86 ms      โ”‚ 14.86 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       2.556 GiB/s   โ”‚ 1.995 GiB/s   โ”‚ 2.233 GiB/s   โ”‚ 2.233 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces   7.963 ms      โ”‚ 10.61 ms      โ”‚ 8.959 ms      โ”‚ 9.074 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       4.046 GiB/s   โ”‚ 3.035 GiB/s   โ”‚ 3.596 GiB/s   โ”‚ 3.551 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces   4.078 ms      โ”‚ 6.332 ms      โ”‚ 4.837 ms      โ”‚ 4.854 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       7.782 GiB/s   โ”‚ 5.012 GiB/s   โ”‚ 6.56 GiB/s    โ”‚ 6.537 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1.5           โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512.8 KiB     โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1.5           โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512.8 KiB     โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces  2.335 ms      โ”‚ 4.001 ms      โ”‚ 2.736 ms      โ”‚ 2.759 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       13.48 GiB/s   โ”‚ 7.87 GiB/s    โ”‚ 11.5 GiB/s    โ”‚ 11.41 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.731 ms      โ”‚ 3.204 ms      โ”‚ 2.028 ms      โ”‚ 2.049 ms      โ”‚ 100     โ”‚ 100
โ”‚                                          18.12 GiB/s   โ”‚ 9.789 GiB/s   โ”‚ 15.46 GiB/s   โ”‚ 15.3 GiB/s    โ”‚         โ”‚
โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚                                            256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ•ฐโ”€ encode_zero_alloc                                     โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    104.3 ยตs      โ”‚ 296.1 ยตs      โ”‚ 120.4 ยตs      โ”‚ 125.2 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       9.947 GiB/s   โ”‚ 3.503 GiB/s   โ”‚ 8.615 GiB/s   โ”‚ 8.286 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    94.05 ยตs      โ”‚ 159.6 ยตs      โ”‚ 110.1 ยตs      โ”‚ 112.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       10.7 GiB/s    โ”‚ 6.308 GiB/s   โ”‚ 9.14 GiB/s    โ”‚ 8.937 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    81.9 ยตs       โ”‚ 139.7 ยตs      โ”‚ 97.38 ยตs      โ”‚ 97.93 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       12.11 GiB/s   โ”‚ 7.097 GiB/s   โ”‚ 10.18 GiB/s   โ”‚ 10.12 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 1             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 1.484 KiB     โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 1             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 1.484 KiB     โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   53.72 ยตs      โ”‚ 97.23 ยตs      โ”‚ 66.51 ยตs      โ”‚ 68.19 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       18.32 GiB/s   โ”‚ 10.12 GiB/s   โ”‚ 14.8 GiB/s    โ”‚ 14.43 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   44.24 ยตs      โ”‚ 215.4 ยตs      โ”‚ 56.16 ยตs      โ”‚ 59.38 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       22.16 GiB/s   โ”‚ 4.552 GiB/s   โ”‚ 17.46 GiB/s   โ”‚ 16.51 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   3.802 ms      โ”‚ 6.21 ms       โ”‚ 4.4 ms        โ”‚ 4.553 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       4.365 GiB/s   โ”‚ 2.673 GiB/s   โ”‚ 3.772 GiB/s   โ”‚ 3.645 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   2.482 ms      โ”‚ 3.51 ms       โ”‚ 2.944 ms      โ”‚ 2.971 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       6.49 GiB/s    โ”‚ 4.589 GiB/s   โ”‚ 5.471 GiB/s   โ”‚ 5.422 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   1.55 ms       โ”‚ 2.248 ms      โ”‚ 1.821 ms      โ”‚ 1.83 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                       10.23 GiB/s   โ”‚ 7.057 GiB/s   โ”‚ 8.71 GiB/s    โ”‚ 8.671 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  1.026 ms      โ”‚ 1.719 ms      โ”‚ 1.188 ms      โ”‚ 1.195 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       15.34 GiB/s   โ”‚ 9.16 GiB/s    โ”‚ 13.25 GiB/s   โ”‚ 13.17 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  823.5 ยตs      โ”‚ 1.331 ms      โ”‚ 954.4 ยตs      โ”‚ 963.2 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       19.04 GiB/s   โ”‚ 11.77 GiB/s   โ”‚ 16.43 GiB/s   โ”‚ 16.28 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   13.06 ms      โ”‚ 16.69 ms      โ”‚ 14.63 ms      โ”‚ 14.59 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       2.541 GiB/s   โ”‚ 1.989 GiB/s   โ”‚ 2.269 GiB/s   โ”‚ 2.275 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   7.74 ms       โ”‚ 10.55 ms      โ”‚ 8.918 ms      โ”‚ 9.009 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       4.163 GiB/s   โ”‚ 3.053 GiB/s   โ”‚ 3.613 GiB/s   โ”‚ 3.576 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   4.352 ms      โ”‚ 6.264 ms      โ”‚ 4.988 ms      โ”‚ 4.997 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       7.292 GiB/s   โ”‚ 5.066 GiB/s   โ”‚ 6.362 GiB/s   โ”‚ 6.351 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  2.311 ms      โ”‚ 3.797 ms      โ”‚ 2.814 ms      โ”‚ 2.787 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       13.62 GiB/s   โ”‚ 8.292 GiB/s   โ”‚ 11.19 GiB/s   โ”‚ 11.29 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.721 ms      โ”‚ 3.313 ms      โ”‚ 1.955 ms      โ”‚ 1.998 ms      โ”‚ 100     โ”‚ 100
                                           18.22 GiB/s   โ”‚ 9.467 GiB/s   โ”‚ 16.04 GiB/s   โ”‚ 15.69 GiB/s   โ”‚         โ”‚
                                           max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                             0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
                                             0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
                                           alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                             0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
                                             0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
                                           dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                             2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                             256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚

Full RLNC Recoder

# Recoding with AVX512-powered SIMD vector x scalar multiplication

Timer precision: 22 ns
full_rlnc_recoder                                                    fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ recode                                                                          โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      17.03 ยตs      โ”‚ 41.7 ยตs       โ”‚ 19.63 ยตs      โ”‚ 19.75 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 32.24 GiB/s   โ”‚ 13.17 GiB/s   โ”‚ 27.98 GiB/s   โ”‚ 27.81 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     14.83 ยตs      โ”‚ 29.73 ยตs      โ”‚ 15.81 ยตs      โ”‚ 16.66 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 34.99 GiB/s   โ”‚ 17.46 GiB/s   โ”‚ 32.83 GiB/s   โ”‚ 31.15 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     12.02 ยตs      โ”‚ 27.9 ยตs       โ”‚ 14.69 ยตs      โ”‚ 14.39 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 42.03 GiB/s   โ”‚ 18.11 GiB/s   โ”‚ 34.39 GiB/s   โ”‚ 35.12 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    18.93 ยตs      โ”‚ 39.98 ยตs      โ”‚ 21.47 ยตs      โ”‚ 22.28 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 26.6 GiB/s    โ”‚ 12.59 GiB/s   โ”‚ 23.45 GiB/s   โ”‚ 22.6 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   46.86 ยตs      โ”‚ 70.52 ยตs      โ”‚ 52.92 ยตs      โ”‚ 53.88 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 11.15 GiB/s   โ”‚ 7.415 GiB/s   โ”‚ 9.88 GiB/s    โ”‚ 9.706 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     506.5 ยตs      โ”‚ 731.2 ยตs      โ”‚ 614 ยตs        โ”‚ 613.8 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 17.35 GiB/s   โ”‚ 12.01 GiB/s   โ”‚ 14.31 GiB/s   โ”‚ 14.31 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    378.7 ยตs      โ”‚ 683.8 ยตs      โ”‚ 467 ยตs        โ”‚ 469.6 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 21.91 GiB/s   โ”‚ 12.13 GiB/s   โ”‚ 17.77 GiB/s   โ”‚ 17.67 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    438.9 ยตs      โ”‚ 639.7 ยตs      โ”‚ 499.6 ยตs      โ”‚ 505.4 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 18.35 GiB/s   โ”‚ 12.59 GiB/s   โ”‚ 16.12 GiB/s   โ”‚ 15.94 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   415.5 ยตs      โ”‚ 705.8 ยตs      โ”‚ 498.9 ยตs      โ”‚ 499 ยตs        โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 19.11 GiB/s   โ”‚ 11.25 GiB/s   โ”‚ 15.91 GiB/s   โ”‚ 15.91 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  447.5 ยตs      โ”‚ 695.5 ยตs      โ”‚ 528.4 ยตs      โ”‚ 532.5 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 17.66 GiB/s   โ”‚ 11.36 GiB/s   โ”‚ 14.95 GiB/s   โ”‚ 14.84 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     1.6 ms        โ”‚ 2.096 ms      โ”‚ 1.892 ms      โ”‚ 1.89 ms       โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 10.98 GiB/s   โ”‚ 8.382 GiB/s   โ”‚ 9.29 GiB/s    โ”‚ 9.296 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    1.343 ms      โ”‚ 1.752 ms      โ”‚ 1.602 ms      โ”‚ 1.593 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 12.35 GiB/s   โ”‚ 9.473 GiB/s   โ”‚ 10.36 GiB/s   โ”‚ 10.41 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    1.164 ms      โ”‚ 1.785 ms      โ”‚ 1.499 ms      โ”‚ 1.486 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 13.83 GiB/s   โ”‚ 9.028 GiB/s   โ”‚ 10.74 GiB/s   โ”‚ 10.84 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   1.382 ms      โ”‚ 1.619 ms      โ”‚ 1.539 ms      โ”‚ 1.528 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 11.48 GiB/s   โ”‚ 9.801 GiB/s   โ”‚ 10.31 GiB/s   โ”‚ 10.38 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  1.359 ms      โ”‚ 1.842 ms      โ”‚ 1.572 ms      โ”‚ 1.571 ms      โ”‚ 100     โ”‚ 100
โ”‚                                                                    11.6 GiB/s    โ”‚ 8.565 GiB/s   โ”‚ 10.03 GiB/s   โ”‚ 10.03 GiB/s   โ”‚         โ”‚
โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ•ฐโ”€ recode_zero_alloc                                                               โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      14.55 ยตs      โ”‚ 22.48 ยตs      โ”‚ 16.41 ยตs      โ”‚ 17.19 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 37.76 GiB/s   โ”‚ 24.43 GiB/s   โ”‚ 33.46 GiB/s   โ”‚ 31.95 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     12.62 ยตs      โ”‚ 26.71 ยตs      โ”‚ 15.42 ยตs      โ”‚ 15.59 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 41.12 GiB/s   โ”‚ 19.43 GiB/s   โ”‚ 33.67 GiB/s   โ”‚ 33.3 GiB/s    โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     14.14 ยตs      โ”‚ 25.43 ยตs      โ”‚ 14.7 ยตs       โ”‚ 15.06 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 35.74 GiB/s   โ”‚ 19.87 GiB/s   โ”‚ 34.37 GiB/s   โ”‚ 33.54 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    18.21 ยตs      โ”‚ 36.5 ยตs       โ”‚ 18.4 ยตs       โ”‚ 19.43 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 27.65 GiB/s   โ”‚ 13.79 GiB/s   โ”‚ 27.37 GiB/s   โ”‚ 25.92 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   43.54 ยตs      โ”‚ 62.17 ยตs      โ”‚ 44.52 ยตs      โ”‚ 46.21 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 12.01 GiB/s   โ”‚ 8.411 GiB/s   โ”‚ 11.74 GiB/s   โ”‚ 11.31 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     360.5 ยตs      โ”‚ 641.8 ยตs      โ”‚ 431.8 ยตs      โ”‚ 433.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 24.37 GiB/s   โ”‚ 13.69 GiB/s   โ”‚ 20.35 GiB/s   โ”‚ 20.26 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    288.4 ยตs      โ”‚ 469.2 ยตs      โ”‚ 344.2 ยตs      โ”‚ 347.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 28.77 GiB/s   โ”‚ 17.69 GiB/s   โ”‚ 24.11 GiB/s   โ”‚ 23.91 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    303.6 ยตs      โ”‚ 422.1 ยตs      โ”‚ 337.2 ยตs      โ”‚ 343.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 26.53 GiB/s   โ”‚ 19.08 GiB/s   โ”‚ 23.89 GiB/s   โ”‚ 23.47 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   310.3 ยตs      โ”‚ 462.4 ยตs      โ”‚ 337.5 ยตs      โ”‚ 343.8 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 25.58 GiB/s   โ”‚ 17.17 GiB/s   โ”‚ 23.52 GiB/s   โ”‚ 23.09 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  338 ยตs        โ”‚ 454 ยตs        โ”‚ 363.1 ยตs      โ”‚ 365 ยตs        โ”‚ 100     โ”‚ 100
   โ”‚                                                                 23.38 GiB/s   โ”‚ 17.4 GiB/s    โ”‚ 21.76 GiB/s   โ”‚ 21.65 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     1.477 ms      โ”‚ 1.941 ms      โ”‚ 1.785 ms      โ”‚ 1.776 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 11.89 GiB/s   โ”‚ 9.054 GiB/s   โ”‚ 9.843 GiB/s   โ”‚ 9.896 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    1.378 ms      โ”‚ 1.73 ms       โ”‚ 1.566 ms      โ”‚ 1.559 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 12.04 GiB/s   โ”‚ 9.595 GiB/s   โ”‚ 10.6 GiB/s    โ”‚ 10.64 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    1.267 ms      โ”‚ 1.644 ms      โ”‚ 1.481 ms      โ”‚ 1.474 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 12.71 GiB/s   โ”‚ 9.798 GiB/s   โ”‚ 10.88 GiB/s   โ”‚ 10.92 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   1.219 ms      โ”‚ 1.604 ms      โ”‚ 1.479 ms      โ”‚ 1.466 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 13.02 GiB/s   โ”‚ 9.896 GiB/s   โ”‚ 10.73 GiB/s   โ”‚ 10.82 GiB/s   โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  1.242 ms      โ”‚ 1.636 ms      โ”‚ 1.465 ms      โ”‚ 1.455 ms      โ”‚ 100     โ”‚ 100
                                                                     12.69 GiB/s   โ”‚ 9.641 GiB/s   โ”‚ 10.76 GiB/s   โ”‚ 10.84 GiB/s   โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Recoding with `rayon` data-parallelism, also using AVX512 intrinsics for faster vector x scalar multiplication

Timer precision: 25 ns
full_rlnc_recoder                                                    fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ recode                                                                          โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      75.03 ยตs      โ”‚ 374.9 ยตs      โ”‚ 99.79 ยตs      โ”‚ 133.9 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 7.323 GiB/s   โ”‚ 1.465 GiB/s   โ”‚ 5.505 GiB/s   โ”‚ 4.101 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     73.06 ยตs      โ”‚ 167.3 ยตs      โ”‚ 82.36 ยตs      โ”‚ 84.77 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 7.107 GiB/s   โ”‚ 3.102 GiB/s   โ”‚ 6.304 GiB/s   โ”‚ 6.125 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 2             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 33.51 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 2             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 33.51 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     64.79 ยตs      โ”‚ 94.51 ยตs      โ”‚ 75.25 ยตs      โ”‚ 76.4 ยตs       โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 7.802 GiB/s   โ”‚ 5.348 GiB/s   โ”‚ 6.717 GiB/s   โ”‚ 6.616 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    66.55 ยตs      โ”‚ 454.6 ยตs      โ”‚ 73.57 ยตs      โ”‚ 110.9 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 7.568 GiB/s   โ”‚ 1.107 GiB/s   โ”‚ 6.846 GiB/s   โ”‚ 4.541 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   79.96 ยตs      โ”‚ 432 ยตs        โ”‚ 103.1 ยตs      โ”‚ 183.1 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 6.54 GiB/s    โ”‚ 1.21 GiB/s    โ”‚ 5.071 GiB/s   โ”‚ 2.855 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     1.848 ms      โ”‚ 2.755 ms      โ”‚ 2.062 ms      โ”‚ 2.094 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 4.754 GiB/s   โ”‚ 3.189 GiB/s   โ”‚ 4.26 GiB/s    โ”‚ 4.195 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    1.452 ms      โ”‚ 2.173 ms      โ”‚ 1.624 ms      โ”‚ 1.653 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 5.715 GiB/s   โ”‚ 3.819 GiB/s   โ”‚ 5.11 GiB/s    โ”‚ 5.021 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    1.031 ms      โ”‚ 1.481 ms      โ”‚ 1.232 ms      โ”‚ 1.247 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 7.808 GiB/s   โ”‚ 5.438 GiB/s   โ”‚ 6.536 GiB/s   โ”‚ 6.458 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   795.7 ยตs      โ”‚ 1.205 ms      โ”‚ 972 ยตs        โ”‚ 976.8 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 9.98 GiB/s    โ”‚ 6.586 GiB/s   โ”‚ 8.17 GiB/s    โ”‚ 8.131 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  618.4 ยตs      โ”‚ 1.013 ms      โ”‚ 825 ยตs        โ”‚ 818.1 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 12.78 GiB/s   โ”‚ 7.798 GiB/s   โ”‚ 9.58 GiB/s    โ”‚ 9.661 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     4.084 ms      โ”‚ 5.697 ms      โ”‚ 4.772 ms      โ”‚ 4.791 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 4.303 GiB/s   โ”‚ 3.085 GiB/s   โ”‚ 3.683 GiB/s   โ”‚ 3.668 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    3.682 ms      โ”‚ 4.882 ms      โ”‚ 4.132 ms      โ”‚ 4.134 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 4.508 GiB/s   โ”‚ 3.4 GiB/s     โ”‚ 4.017 GiB/s   โ”‚ 4.015 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    2.784 ms      โ”‚ 3.752 ms      โ”‚ 3.073 ms      โ”‚ 3.134 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 5.787 GiB/s   โ”‚ 4.293 GiB/s   โ”‚ 5.243 GiB/s   โ”‚ 5.142 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   1.825 ms      โ”‚ 2.803 ms      โ”‚ 2.092 ms      โ”‚ 2.118 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 8.697 GiB/s   โ”‚ 5.662 GiB/s   โ”‚ 7.589 GiB/s   โ”‚ 7.496 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  1.385 ms      โ”‚ 1.934 ms      โ”‚ 1.676 ms      โ”‚ 1.676 ms      โ”‚ 100     โ”‚ 100
โ”‚                                                                    11.38 GiB/s   โ”‚ 8.154 GiB/s   โ”‚ 9.413 GiB/s   โ”‚ 9.41 GiB/s    โ”‚         โ”‚
โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚                                                                      256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ•ฐโ”€ recode_zero_alloc                                                               โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      77.78 ยตs      โ”‚ 470.6 ยตs      โ”‚ 99.06 ยตs      โ”‚ 170.5 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 7.063 GiB/s   โ”‚ 1.167 GiB/s   โ”‚ 5.546 GiB/s   โ”‚ 3.222 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     66.26 ยตs      โ”‚ 366 ยตs        โ”‚ 81.98 ยตs      โ”‚ 91.98 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 7.837 GiB/s   โ”‚ 1.418 GiB/s   โ”‚ 6.334 GiB/s   โ”‚ 5.645 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     59.85 ยตs      โ”‚ 96.22 ยตs      โ”‚ 73.08 ยตs      โ”‚ 73.55 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 8.445 GiB/s   โ”‚ 5.253 GiB/s   โ”‚ 6.917 GiB/s   โ”‚ 6.872 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    67.66 ยตs      โ”‚ 365.1 ยตs      โ”‚ 74.93 ยตs      โ”‚ 97.23 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 7.444 GiB/s   โ”‚ 1.379 GiB/s   โ”‚ 6.721 GiB/s   โ”‚ 5.18 GiB/s    โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   75.64 ยตs      โ”‚ 416.1 ยตs      โ”‚ 86.26 ยตs      โ”‚ 109.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 6.913 GiB/s   โ”‚ 1.256 GiB/s   โ”‚ 6.062 GiB/s   โ”‚ 4.78 GiB/s    โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     1.802 ms      โ”‚ 2.639 ms      โ”‚ 2.142 ms      โ”‚ 2.176 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 4.876 GiB/s   โ”‚ 3.33 GiB/s    โ”‚ 4.101 GiB/s   โ”‚ 4.037 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    1.396 ms      โ”‚ 2.156 ms      โ”‚ 1.771 ms      โ”‚ 1.757 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 5.942 GiB/s   โ”‚ 3.849 GiB/s   โ”‚ 4.685 GiB/s   โ”‚ 4.723 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    1.042 ms      โ”‚ 1.903 ms      โ”‚ 1.318 ms      โ”‚ 1.339 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 7.73 GiB/s    โ”‚ 4.232 GiB/s   โ”‚ 6.113 GiB/s   โ”‚ 6.017 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   747.3 ยตs      โ”‚ 1.157 ms      โ”‚ 956.6 ยตs      โ”‚ 948.5 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 10.62 GiB/s   โ”‚ 6.859 GiB/s   โ”‚ 8.301 GiB/s   โ”‚ 8.373 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  576.1 ยตs      โ”‚ 1.22 ms       โ”‚ 739 ยตs        โ”‚ 773.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 13.71 GiB/s   โ”‚ 6.477 GiB/s   โ”‚ 10.69 GiB/s   โ”‚ 10.22 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     4.223 ms      โ”‚ 5.42 ms       โ”‚ 4.722 ms      โ”‚ 4.759 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 4.161 GiB/s   โ”‚ 3.243 GiB/s   โ”‚ 3.722 GiB/s   โ”‚ 3.693 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    3.704 ms      โ”‚ 4.893 ms      โ”‚ 4.176 ms      โ”‚ 4.159 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 4.481 GiB/s   โ”‚ 3.392 GiB/s   โ”‚ 3.974 GiB/s   โ”‚ 3.991 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    2.725 ms      โ”‚ 3.944 ms      โ”‚ 3.206 ms      โ”‚ 3.22 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                                                 5.912 GiB/s   โ”‚ 4.085 GiB/s   โ”‚ 5.025 GiB/s   โ”‚ 5.004 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   1           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   1.484 KiB   โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   1           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   1.484 KiB   โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   1.968 ms      โ”‚ 3.462 ms      โ”‚ 2.192 ms      โ”‚ 2.245 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 8.067 GiB/s   โ”‚ 4.584 GiB/s   โ”‚ 7.24 GiB/s    โ”‚ 7.071 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  1.345 ms      โ”‚ 2.041 ms      โ”‚ 1.675 ms      โ”‚ 1.659 ms      โ”‚ 100     โ”‚ 100
                                                                     11.72 GiB/s   โ”‚ 7.729 GiB/s   โ”‚ 9.415 GiB/s   โ”‚ 9.506 GiB/s   โ”‚         โ”‚
                                                                     max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                       0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
                                                                       0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
                                                                     alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                       0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
                                                                       0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
                                                                     dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                       2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                                                       256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚

Full RLNC Decoder

# Decoding with AVX512-powered SIMD vector x scalar multiplication

Timer precision: 22 ns
full_rlnc_decoder                          fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ decode                                                โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    480.7 ยตs      โ”‚ 957.7 ยตs      โ”‚ 506.3 ยตs      โ”‚ 522.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       2.031 GiB/s   โ”‚ 1.019 GiB/s   โ”‚ 1.929 GiB/s   โ”‚ 1.869 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    950.4 ยตs      โ”‚ 1.437 ms      โ”‚ 990.3 ยตs      โ”‚ 1.013 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       1.028 GiB/s   โ”‚ 696.5 MiB/s   โ”‚ 1010 MiB/s    โ”‚ 987.9 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    1.735 ms      โ”‚ 2.06 ms       โ”‚ 1.819 ms      โ”‚ 1.84 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                       578.5 MiB/s   โ”‚ 487.2 MiB/s   โ”‚ 551.7 MiB/s   โ”‚ 545.6 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   4.353 ms      โ”‚ 4.995 ms      โ”‚ 4.577 ms      โ”‚ 4.589 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       233.3 MiB/s   โ”‚ 203.3 MiB/s   โ”‚ 221.9 MiB/s   โ”‚ 221.2 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   14.71 ms      โ”‚ 16.09 ms      โ”‚ 15.13 ms      โ”‚ 15.15 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       72.21 MiB/s   โ”‚ 66.04 MiB/s   โ”‚ 70.24 MiB/s   โ”‚ 70.1 MiB/s    โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   14.58 ms      โ”‚ 21.38 ms      โ”‚ 14.89 ms      โ”‚ 15.03 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       1.071 GiB/s   โ”‚ 748.2 MiB/s   โ”‚ 1.048 GiB/s   โ”‚ 1.039 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   22.66 ms      โ”‚ 24.9 ms       โ”‚ 23.69 ms      โ”‚ 23.68 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       705.9 MiB/s   โ”‚ 642.4 MiB/s   โ”‚ 675.3 MiB/s   โ”‚ 675.6 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   44.49 ms      โ”‚ 48.41 ms      โ”‚ 45.44 ms      โ”‚ 45.52 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       359.6 MiB/s   โ”‚ 330.5 MiB/s   โ”‚ 352.1 MiB/s   โ”‚ 351.5 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  88.44 ms      โ”‚ 92.85 ms      โ”‚ 89.9 ms       โ”‚ 89.91 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       181 MiB/s     โ”‚ 172.4 MiB/s   โ”‚ 178.1 MiB/s   โ”‚ 178.1 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  183.2 ms      โ”‚ 188.8 ms      โ”‚ 185.6 ms      โ”‚ 185.6 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       87.64 MiB/s   โ”‚ 85.03 MiB/s   โ”‚ 86.5 MiB/s    โ”‚ 86.5 MiB/s    โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   50.83 ms      โ”‚ 56.01 ms      โ”‚ 52.46 ms      โ”‚ 52.61 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       629.5 MiB/s   โ”‚ 571.3 MiB/s   โ”‚ 609.9 MiB/s   โ”‚ 608.1 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   68.57 ms      โ”‚ 80.56 ms      โ”‚ 70.51 ms      โ”‚ 71.01 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       466.6 MiB/s   โ”‚ 397.2 MiB/s   โ”‚ 453.8 MiB/s   โ”‚ 450.6 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   103.8 ms      โ”‚ 110.1 ms      โ”‚ 106.8 ms      โ”‚ 106.9 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       308 MiB/s     โ”‚ 290.5 MiB/s   โ”‚ 299.4 MiB/s   โ”‚ 299.1 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  191.8 ms      โ”‚ 199.8 ms      โ”‚ 195 ms        โ”‚ 195.1 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       166.8 MiB/s   โ”‚ 160.2 MiB/s   โ”‚ 164.1 MiB/s   โ”‚ 164 MiB/s     โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  373 ms        โ”‚ 390.6 ms      โ”‚ 378.5 ms      โ”‚ 378.7 ms      โ”‚ 100     โ”‚ 100
                                           85.94 MiB/s   โ”‚ 82.08 MiB/s   โ”‚ 84.69 MiB/s   โ”‚ 84.65 MiB/s   โ”‚         โ”‚

On AWS EC2 m7a.large with AMD EPYC 9R14

Running benchmarks on Linux 6.14.0-1011-aws x86_64, compiled with rustc 1.89.0 (29483883e 2025-08-04).

Component Peak Median Throughput (default feature) Peak Median Throughput (parallel feature) Impact of number of pieces on performance
Full RLNC Encoder 52.42 GiB/s 25.22 GiB/s The number of pieces original data got split into has a minimal impact on the encoding speed.
Full RLNC Recoder 45.15 GiB/s 8.902 GiB/s Similar to the encoder, the recoder's performance remains largely consistent regardless of how many pieces the original data is split into.
Full RLNC Decoder 2.19 GiB/s Doesn't yet implement a parallel decoding mode As the number of pieces increases, the decoding time increases substantially, leading to a considerable drop in throughput. This indicates that decoding is the most computationally intensive part of the full RLNC scheme, and its performance is inversely proportional to the number of pieces.

In summary, the full RLNC implementation demonstrates excellent encoding and recoding speeds, consistently achieving GiB/s throughputs with minimal sensitivity to the number of data pieces. The parallel feature, leveraging Rust rayon data-parallelism framework, also provides good performance for both encoding and recoding. Whether you want to use that feature, completely depends on your usecase. However, decoding remains a much slower operation, with its performance significantly diminishing as the data is split into a greater number of pieces, and currently does not implement a parallel decoding algorithm.

Click to view detailed benchmark results ๐Ÿ‘‡

Full RLNC Encoder

# Encoding with AVX512-powered SIMD vector x scalar multiplication

Timer precision: 20 ns
full_rlnc_encoder                          fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ encode                                                โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces    21.24 ยตs      โ”‚ 78.72 ยตs      โ”‚ 23.1 ยตs       โ”‚ 24.78 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       48.85 GiB/s   โ”‚ 13.17 GiB/s   โ”‚ 44.9 GiB/s    โ”‚ 41.86 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces    23.04 ยตs      โ”‚ 47.12 ยตs      โ”‚ 25.13 ยตs      โ”‚ 26.58 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       43.69 GiB/s   โ”‚ 21.37 GiB/s   โ”‚ 40.06 GiB/s   โ”‚ 37.87 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces    18.17 ยตs      โ”‚ 30.15 ยตs      โ”‚ 18.91 ยตs      โ”‚ 19.46 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       54.56 GiB/s   โ”‚ 32.89 GiB/s   โ”‚ 52.42 GiB/s   โ”‚ 50.94 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces   17.35 ยตs      โ”‚ 29.71 ยตs      โ”‚ 20.15 ยตs      โ”‚ 20.37 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       56.7 GiB/s    โ”‚ 33.12 GiB/s   โ”‚ 48.83 GiB/s   โ”‚ 48.31 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces   17.42 ยตs      โ”‚ 30.84 ยตs      โ”‚ 20.09 ยตs      โ”‚ 19.63 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       56.27 GiB/s   โ”‚ 31.8 GiB/s    โ”‚ 48.82 GiB/s   โ”‚ 49.96 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces   424.6 ยตs      โ”‚ 707.1 ยตs      โ”‚ 464.6 ยตs      โ”‚ 467.2 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       39.09 GiB/s   โ”‚ 23.47 GiB/s   โ”‚ 35.73 GiB/s   โ”‚ 35.53 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces   384.3 ยตs      โ”‚ 687.4 ยตs      โ”‚ 411.7 ยตs      โ”‚ 420.4 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       41.92 GiB/s   โ”‚ 23.43 GiB/s   โ”‚ 39.13 GiB/s   โ”‚ 38.32 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces   396.7 ยตs      โ”‚ 648.1 ยตs      โ”‚ 434.2 ยตs      โ”‚ 437.9 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       40 GiB/s      โ”‚ 24.48 GiB/s   โ”‚ 36.54 GiB/s   โ”‚ 36.23 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces  394 ยตs        โ”‚ 650.5 ยตs      โ”‚ 440.1 ยตs      โ”‚ 481.3 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       39.96 GiB/s   โ”‚ 24.2 GiB/s    โ”‚ 35.77 GiB/s   โ”‚ 32.71 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces  393.3 ยตs      โ”‚ 732.7 ยตs      โ”‚ 436 ยตs        โ”‚ 439 ยตs        โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       39.88 GiB/s   โ”‚ 21.4 GiB/s    โ”‚ 35.97 GiB/s   โ”‚ 35.72 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces   1.206 ms      โ”‚ 2.327 ms      โ”‚ 1.337 ms      โ”‚ 1.343 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       27.51 GiB/s   โ”‚ 14.26 GiB/s   โ”‚ 24.82 GiB/s   โ”‚ 24.71 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces   1.176 ms      โ”‚ 1.351 ms      โ”‚ 1.253 ms      โ”‚ 1.256 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       27.38 GiB/s   โ”‚ 23.85 GiB/s   โ”‚ 25.71 GiB/s   โ”‚ 25.64 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces   1.364 ms      โ”‚ 1.754 ms      โ”‚ 1.541 ms      โ”‚ 1.537 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       23.25 GiB/s   โ”‚ 18.08 GiB/s   โ”‚ 20.58 GiB/s   โ”‚ 20.64 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces  1.428 ms      โ”‚ 1.891 ms      โ”‚ 1.513 ms      โ”‚ 1.544 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       22.04 GiB/s   โ”‚ 16.65 GiB/s   โ”‚ 20.8 GiB/s    โ”‚ 20.39 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.483 ms      โ”‚ 1.845 ms      โ”‚ 1.582 ms      โ”‚ 1.605 ms      โ”‚ 100     โ”‚ 100
โ”‚                                          21.14 GiB/s   โ”‚ 17 GiB/s      โ”‚ 19.82 GiB/s   โ”‚ 19.54 GiB/s   โ”‚         โ”‚
โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ•ฐโ”€ encode_zero_alloc                                     โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    20.69 ยตs      โ”‚ 42.29 ยตs      โ”‚ 22.3 ยตs       โ”‚ 23.28 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       50.12 GiB/s   โ”‚ 24.53 GiB/s   โ”‚ 46.51 GiB/s   โ”‚ 44.56 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    21.49 ยตs      โ”‚ 41.1 ยตs       โ”‚ 22.38 ยตs      โ”‚ 24.16 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       46.84 GiB/s   โ”‚ 24.49 GiB/s   โ”‚ 44.98 GiB/s   โ”‚ 41.68 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    17.79 ยตs      โ”‚ 37.24 ยตs      โ”‚ 19.58 ยตs      โ”‚ 21.14 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       55.72 GiB/s   โ”‚ 26.62 GiB/s   โ”‚ 50.63 GiB/s   โ”‚ 46.9 GiB/s    โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   16.87 ยตs      โ”‚ 32.84 ยตs      โ”‚ 17.43 ยตs      โ”‚ 19.55 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       58.32 GiB/s   โ”‚ 29.96 GiB/s   โ”‚ 56.44 GiB/s   โ”‚ 50.33 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   17.06 ยตs      โ”‚ 31.73 ยตs      โ”‚ 17.47 ยตs      โ”‚ 19 ยตs         โ”‚ 100     โ”‚ 100
   โ”‚                                       57.46 GiB/s   โ”‚ 30.91 GiB/s   โ”‚ 56.11 GiB/s   โ”‚ 51.61 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   409.2 ยตs      โ”‚ 581.7 ยตs      โ”‚ 456 ยตs        โ”‚ 461.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       40.56 GiB/s   โ”‚ 28.53 GiB/s   โ”‚ 36.4 GiB/s    โ”‚ 36 GiB/s      โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   389.4 ยตs      โ”‚ 581.4 ยตs      โ”‚ 414.4 ยตs      โ”‚ 419 ยตs        โ”‚ 100     โ”‚ 100
   โ”‚                                       41.37 GiB/s   โ”‚ 27.71 GiB/s   โ”‚ 38.88 GiB/s   โ”‚ 38.45 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   390.4 ยตs      โ”‚ 636.5 ยตs      โ”‚ 408.1 ยตs      โ”‚ 414.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       40.64 GiB/s   โ”‚ 24.93 GiB/s   โ”‚ 38.87 GiB/s   โ”‚ 38.29 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  388.3 ยตs      โ”‚ 628.6 ยตs      โ”‚ 405.3 ยตs      โ”‚ 416.9 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       40.54 GiB/s   โ”‚ 25.05 GiB/s   โ”‚ 38.84 GiB/s   โ”‚ 37.76 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  388 ยตs        โ”‚ 763.2 ยตs      โ”‚ 403.7 ยตs      โ”‚ 415.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       40.41 GiB/s   โ”‚ 20.55 GiB/s   โ”‚ 38.85 GiB/s   โ”‚ 37.73 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   1.19 ms       โ”‚ 1.409 ms      โ”‚ 1.268 ms      โ”‚ 1.274 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       27.88 GiB/s   โ”‚ 23.56 GiB/s   โ”‚ 26.17 GiB/s   โ”‚ 26.04 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   1.125 ms      โ”‚ 1.379 ms      โ”‚ 1.192 ms      โ”‚ 1.201 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       28.63 GiB/s   โ”‚ 23.35 GiB/s   โ”‚ 27.01 GiB/s   โ”‚ 26.81 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   1.287 ms      โ”‚ 1.622 ms      โ”‚ 1.431 ms      โ”‚ 1.438 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       24.65 GiB/s   โ”‚ 19.55 GiB/s   โ”‚ 22.17 GiB/s   โ”‚ 22.05 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  1.39 ms       โ”‚ 1.806 ms      โ”‚ 1.456 ms      โ”‚ 1.486 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       22.64 GiB/s   โ”‚ 17.43 GiB/s   โ”‚ 21.62 GiB/s   โ”‚ 21.19 GiB/s   โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.418 ms      โ”‚ 1.776 ms      โ”‚ 1.507 ms      โ”‚ 1.519 ms      โ”‚ 100     โ”‚ 100
                                           22.12 GiB/s   โ”‚ 17.65 GiB/s   โ”‚ 20.81 GiB/s   โ”‚ 20.64 GiB/s   โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Encoding with `rayon` data-parallelism, also using AVX512 intrinsics for faster vector x scalar multiplication

Timer precision: 20 ns
full_rlnc_encoder                          fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ encode                                                โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces    396 ยตs        โ”‚ 706.3 ยตs      โ”‚ 410.2 ยตs      โ”‚ 413.3 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       2.62 GiB/s    โ”‚ 1.469 GiB/s   โ”‚ 2.529 GiB/s   โ”‚ 2.51 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 28            โ”‚ 1             โ”‚ 1.28          โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 72.89 KiB     โ”‚ 64.01 KiB     โ”‚ 64.12 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 33            โ”‚ 1             โ”‚ 1.33          โ”‚         โ”‚
โ”‚  โ”‚                                         64.01 KiB   โ”‚ 73.26 KiB     โ”‚ 64.01 KiB     โ”‚ 64.12 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 9             โ”‚ 2             โ”‚ 2.07          โ”‚         โ”‚
โ”‚  โ”‚                                         128 KiB     โ”‚ 128.5 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces    55.26 ยตs      โ”‚ 167.7 ยตs      โ”‚ 57.96 ยตs      โ”‚ 59.69 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       18.22 GiB/s   โ”‚ 6.004 GiB/s   โ”‚ 17.37 GiB/s   โ”‚ 16.87 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces    43.04 ยตs      โ”‚ 89.11 ยตs      โ”‚ 45.5 ยตs       โ”‚ 46.35 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       23.04 GiB/s   โ”‚ 11.13 GiB/s   โ”‚ 21.79 GiB/s   โ”‚ 21.39 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces   36.62 ยตs      โ”‚ 108.9 ยตs      โ”‚ 39.19 ยตs      โ”‚ 48.92 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       26.87 GiB/s   โ”‚ 9.039 GiB/s   โ”‚ 25.11 GiB/s   โ”‚ 20.11 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces   35.79 ยตs      โ”‚ 99.82 ยตs      โ”‚ 38.87 ยตs      โ”‚ 49.29 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       27.39 GiB/s   โ”‚ 9.826 GiB/s   โ”‚ 25.22 GiB/s   โ”‚ 19.89 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces   3.455 ms      โ”‚ 7.688 ms      โ”‚ 3.596 ms      โ”‚ 3.788 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       4.804 GiB/s   โ”‚ 2.159 GiB/s   โ”‚ 4.615 GiB/s   โ”‚ 4.381 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces   858.9 ยตs      โ”‚ 2.324 ms      โ”‚ 883.6 ยตs      โ”‚ 1.072 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       18.75 GiB/s   โ”‚ 6.93 GiB/s    โ”‚ 18.23 GiB/s   โ”‚ 15.01 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces   652.2 ยตs      โ”‚ 1.201 ms      โ”‚ 672.6 ยตs      โ”‚ 696.4 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       24.32 GiB/s   โ”‚ 13.2 GiB/s    โ”‚ 23.59 GiB/s   โ”‚ 22.78 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces  562.3 ยตs      โ”‚ 1.328 ms      โ”‚ 576.3 ยตs      โ”‚ 588.4 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       28 GiB/s      โ”‚ 11.85 GiB/s   โ”‚ 27.32 GiB/s   โ”‚ 26.76 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces  523.8 ยตs      โ”‚ 702.2 ยตs      โ”‚ 535.7 ยตs      โ”‚ 537.1 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       29.94 GiB/s   โ”‚ 22.33 GiB/s   โ”‚ 29.28 GiB/s   โ”‚ 29.2 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces   15.57 ms      โ”‚ 16.98 ms      โ”‚ 16.03 ms      โ”‚ 16.07 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       2.131 GiB/s   โ”‚ 1.955 GiB/s   โ”‚ 2.07 GiB/s    โ”‚ 2.064 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         2.001 MiB   โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         2.001 MiB   โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces   4.267 ms      โ”‚ 5.788 ms      โ”‚ 4.397 ms      โ”‚ 4.489 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       7.552 GiB/s   โ”‚ 5.567 GiB/s   โ”‚ 7.328 GiB/s   โ”‚ 7.177 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces   1.639 ms      โ”‚ 2.597 ms      โ”‚ 1.663 ms      โ”‚ 1.676 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       19.36 GiB/s   โ”‚ 12.22 GiB/s   โ”‚ 19.08 GiB/s   โ”‚ 18.92 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1.5           โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512.8 KiB     โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1.5           โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512.8 KiB     โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces  1.483 ms      โ”‚ 2.117 ms      โ”‚ 1.514 ms      โ”‚ 1.529 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                       21.22 GiB/s   โ”‚ 14.87 GiB/s   โ”‚ 20.78 GiB/s   โ”‚ 20.59 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                         256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.373 ms      โ”‚ 1.762 ms      โ”‚ 1.408 ms      โ”‚ 1.432 ms      โ”‚ 100     โ”‚ 100
โ”‚                                          22.83 GiB/s   โ”‚ 17.8 GiB/s    โ”‚ 22.26 GiB/s   โ”‚ 21.9 GiB/s    โ”‚         โ”‚
โ”‚                                          max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                          alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                            128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                          dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                            2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚                                            256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ•ฐโ”€ encode_zero_alloc                                     โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    71.34 ยตs      โ”‚ 103.2 ยตs      โ”‚ 74.32 ยตs      โ”‚ 75.09 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       14.54 GiB/s   โ”‚ 10.04 GiB/s   โ”‚ 13.96 GiB/s   โ”‚ 13.81 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    54.67 ยตs      โ”‚ 74.2 ยตs       โ”‚ 57.68 ยตs      โ”‚ 57.97 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       18.41 GiB/s   โ”‚ 13.57 GiB/s   โ”‚ 17.46 GiB/s   โ”‚ 17.37 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    42.69 ยตs      โ”‚ 128.9 ยตs      โ”‚ 45.47 ยตs      โ”‚ 52.06 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       23.23 GiB/s   โ”‚ 7.694 GiB/s   โ”‚ 21.81 GiB/s   โ”‚ 19.05 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   36.27 ยตs      โ”‚ 88.37 ยตs      โ”‚ 39.29 ยตs      โ”‚ 49.21 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       27.13 GiB/s   โ”‚ 11.13 GiB/s   โ”‚ 25.05 GiB/s   โ”‚ 20 GiB/s      โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   36.09 ยตs      โ”‚ 56.51 ยตs      โ”‚ 38.65 ยตs      โ”‚ 38.6 ยตs       โ”‚ 100     โ”‚ 100
   โ”‚                                       27.17 GiB/s   โ”‚ 17.35 GiB/s   โ”‚ 25.37 GiB/s   โ”‚ 25.4 GiB/s    โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   3.35 ms       โ”‚ 5.831 ms      โ”‚ 3.581 ms      โ”‚ 3.689 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       4.954 GiB/s   โ”‚ 2.846 GiB/s   โ”‚ 4.634 GiB/s   โ”‚ 4.499 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   846.4 ยตs      โ”‚ 2.324 ms      โ”‚ 865.5 ยตs      โ”‚ 950.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       19.03 GiB/s   โ”‚ 6.932 GiB/s   โ”‚ 18.61 GiB/s   โ”‚ 16.95 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   644.9 ยตs      โ”‚ 1.293 ms      โ”‚ 660.7 ยตs      โ”‚ 673.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       24.6 GiB/s    โ”‚ 12.26 GiB/s   โ”‚ 24.01 GiB/s   โ”‚ 23.56 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  560.8 ยตs      โ”‚ 1.321 ms      โ”‚ 575.2 ยตs      โ”‚ 615.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       28.07 GiB/s   โ”‚ 11.91 GiB/s   โ”‚ 27.37 GiB/s   โ”‚ 25.59 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  523.9 ยตs      โ”‚ 1.221 ms      โ”‚ 534.9 ยตs      โ”‚ 555.2 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       29.94 GiB/s   โ”‚ 12.84 GiB/s   โ”‚ 29.32 GiB/s   โ”‚ 28.24 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   15.48 ms      โ”‚ 18.52 ms      โ”‚ 15.91 ms      โ”‚ 15.98 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       2.144 GiB/s   โ”‚ 1.792 GiB/s   โ”‚ 2.086 GiB/s   โ”‚ 2.077 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   4.269 ms      โ”‚ 6.73 ms       โ”‚ 4.347 ms      โ”‚ 4.39 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                       7.548 GiB/s   โ”‚ 4.788 GiB/s   โ”‚ 7.413 GiB/s   โ”‚ 7.339 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 1             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 1.484 KiB     โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 1             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 1.484 KiB     โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   1.638 ms      โ”‚ 3.458 ms      โ”‚ 1.667 ms      โ”‚ 1.721 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       19.36 GiB/s   โ”‚ 9.177 GiB/s   โ”‚ 19.03 GiB/s   โ”‚ 18.44 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  1.467 ms      โ”‚ 1.798 ms      โ”‚ 1.505 ms      โ”‚ 1.515 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       21.46 GiB/s   โ”‚ 17.51 GiB/s   โ”‚ 20.92 GiB/s   โ”‚ 20.78 GiB/s   โ”‚         โ”‚
   โ”‚                                       max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                         0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                       dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                         2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                         512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  1.385 ms      โ”‚ 1.963 ms      โ”‚ 1.423 ms      โ”‚ 1.436 ms      โ”‚ 100     โ”‚ 100
                                           22.64 GiB/s   โ”‚ 15.98 GiB/s   โ”‚ 22.04 GiB/s   โ”‚ 21.83 GiB/s   โ”‚         โ”‚
                                           max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                             0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
                                             0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
                                           alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                             0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
                                             0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
                                           dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                             2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                             256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚

Full RLNC Recoder

# Recoding with AVX512-powered SIMD vector x scalar multiplication

Timer precision: 20 ns
full_rlnc_recoder                                                    fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ recode                                                                          โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      12.13 ยตs      โ”‚ 27.81 ยตs      โ”‚ 13.95 ยตs      โ”‚ 14.18 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 45.26 GiB/s   โ”‚ 19.75 GiB/s   โ”‚ 39.36 GiB/s   โ”‚ 38.74 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚ 64.01 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     10.78 ยตs      โ”‚ 22.56 ยตs      โ”‚ 11.49 ยตs      โ”‚ 11.77 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 48.13 GiB/s   โ”‚ 23 GiB/s      โ”‚ 45.15 GiB/s   โ”‚ 44.11 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     10.97 ยตs      โ”‚ 21.87 ยตs      โ”‚ 11.24 ยตs      โ”‚ 11.35 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 46.04 GiB/s   โ”‚ 23.1 GiB/s    โ”‚ 44.97 GiB/s   โ”‚ 44.51 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    16.88 ยตs      โ”‚ 31.08 ยตs      โ”‚ 18.42 ยตs      โ”‚ 18.62 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 29.82 GiB/s   โ”‚ 16.2 GiB/s    โ”‚ 27.33 GiB/s   โ”‚ 27.04 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   47.64 ยตs      โ”‚ 63.27 ยตs      โ”‚ 48.8 ยตs       โ”‚ 49.92 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 10.97 GiB/s   โ”‚ 8.265 GiB/s   โ”‚ 10.71 GiB/s   โ”‚ 10.47 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     245 ยตs        โ”‚ 382.5 ยตs      โ”‚ 288.5 ยตs      โ”‚ 301.8 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 35.86 GiB/s   โ”‚ 22.97 GiB/s   โ”‚ 30.45 GiB/s   โ”‚ 29.11 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    231.2 ยตs      โ”‚ 402.8 ยตs      โ”‚ 273.9 ยตs      โ”‚ 282.9 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 35.89 GiB/s   โ”‚ 20.6 GiB/s    โ”‚ 30.3 GiB/s    โ”‚ 29.33 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    245.1 ยตs      โ”‚ 435.9 ยตs      โ”‚ 277.7 ยตs      โ”‚ 293.1 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 32.87 GiB/s   โ”‚ 18.48 GiB/s   โ”‚ 29.01 GiB/s   โ”‚ 27.49 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   235.7 ยตs      โ”‚ 449.9 ยตs      โ”‚ 274.1 ยตs      โ”‚ 293.6 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 33.69 GiB/s   โ”‚ 17.65 GiB/s   โ”‚ 28.96 GiB/s   โ”‚ 27.04 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  277.3 ยตs      โ”‚ 425.6 ยตs      โ”‚ 308.7 ยตs      โ”‚ 317.7 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 28.49 GiB/s   โ”‚ 18.56 GiB/s   โ”‚ 25.6 GiB/s    โ”‚ 24.87 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     586.2 ยตs      โ”‚ 802 ยตs        โ”‚ 692.4 ยตs      โ”‚ 696.9 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 29.98 GiB/s   โ”‚ 21.91 GiB/s   โ”‚ 25.38 GiB/s   โ”‚ 25.22 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    549.3 ยตs      โ”‚ 805.9 ยตs      โ”‚ 636.3 ยตs      โ”‚ 649.2 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 30.22 GiB/s   โ”‚ 20.59 GiB/s   โ”‚ 26.08 GiB/s   โ”‚ 25.56 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    661.3 ยตs      โ”‚ 883.1 ยตs      โ”‚ 723.1 ยตs      โ”‚ 730 ยตs        โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 24.36 GiB/s   โ”‚ 18.24 GiB/s   โ”‚ 22.28 GiB/s   โ”‚ 22.07 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   739.9 ยตs      โ”‚ 1.062 ms      โ”‚ 821.8 ยตs      โ”‚ 829.1 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 21.45 GiB/s   โ”‚ 14.93 GiB/s   โ”‚ 19.31 GiB/s   โ”‚ 19.14 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  790.2 ยตs      โ”‚ 1.003 ms      โ”‚ 858.9 ยตs      โ”‚ 868.5 ยตs      โ”‚ 100     โ”‚ 100
โ”‚                                                                    19.96 GiB/s   โ”‚ 15.72 GiB/s   โ”‚ 18.36 GiB/s   โ”‚ 18.16 GiB/s   โ”‚         โ”‚
โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1             โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ•ฐโ”€ recode_zero_alloc                                                               โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      9.609 ยตs      โ”‚ 12.35 ยตs      โ”‚ 11.86 ยตs      โ”‚ 11.59 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 57.17 GiB/s   โ”‚ 44.45 GiB/s   โ”‚ 46.29 GiB/s   โ”‚ 47.37 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     10.26 ยตs      โ”‚ 20.96 ยตs      โ”‚ 12.33 ยตs      โ”‚ 12.2 ยตs       โ”‚ 100     โ”‚ 100
   โ”‚                                                                 50.56 GiB/s   โ”‚ 24.76 GiB/s   โ”‚ 42.08 GiB/s   โ”‚ 42.56 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     10.72 ยตs      โ”‚ 21.64 ยตs      โ”‚ 11.1 ยตs       โ”‚ 11.35 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 47.11 GiB/s   โ”‚ 23.35 GiB/s   โ”‚ 45.5 GiB/s    โ”‚ 44.53 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    17.9 ยตs       โ”‚ 28.89 ยตs      โ”‚ 18.15 ยตs      โ”‚ 18.3 ยตs       โ”‚ 100     โ”‚ 100
   โ”‚                                                                 28.13 GiB/s   โ”‚ 17.42 GiB/s   โ”‚ 27.73 GiB/s   โ”‚ 27.51 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   41.44 ยตs      โ”‚ 61.9 ยตs       โ”‚ 50.01 ยตs      โ”‚ 48.54 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 12.61 GiB/s   โ”‚ 8.447 GiB/s   โ”‚ 10.45 GiB/s   โ”‚ 10.77 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     201.5 ยตs      โ”‚ 340.1 ยตs      โ”‚ 218.5 ยตs      โ”‚ 219.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 43.6 GiB/s    โ”‚ 25.83 GiB/s   โ”‚ 40.21 GiB/s   โ”‚ 40.06 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    187.9 ยตs      โ”‚ 395.7 ยตs      โ”‚ 218.4 ยตs      โ”‚ 222.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 44.17 GiB/s   โ”‚ 20.97 GiB/s   โ”‚ 38 GiB/s      โ”‚ 37.32 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    191 ยตs        โ”‚ 360.7 ยตs      โ”‚ 211.2 ยตs      โ”‚ 211.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 42.17 GiB/s   โ”‚ 22.33 GiB/s   โ”‚ 38.14 GiB/s   โ”‚ 38.06 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   198.6 ยตs      โ”‚ 404.6 ยตs      โ”‚ 213.6 ยตs      โ”‚ 215.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 39.98 GiB/s   โ”‚ 19.62 GiB/s   โ”‚ 37.17 GiB/s   โ”‚ 36.87 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  222.3 ยตs      โ”‚ 418.2 ยตs      โ”‚ 234.2 ยตs      โ”‚ 240.7 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 35.55 GiB/s   โ”‚ 18.89 GiB/s   โ”‚ 33.74 GiB/s   โ”‚ 32.83 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     560.4 ยตs      โ”‚ 753.4 ยตs      โ”‚ 655.9 ยตs      โ”‚ 659.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 31.36 GiB/s   โ”‚ 23.32 GiB/s   โ”‚ 26.79 GiB/s   โ”‚ 26.64 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    561.3 ยตs      โ”‚ 792 ยตs        โ”‚ 641.9 ยตs      โ”‚ 648.5 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 29.57 GiB/s   โ”‚ 20.96 GiB/s   โ”‚ 25.86 GiB/s   โ”‚ 25.59 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    636.7 ยตs      โ”‚ 886.5 ยตs      โ”‚ 720.4 ยตs      โ”‚ 734.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 25.3 GiB/s    โ”‚ 18.17 GiB/s   โ”‚ 22.36 GiB/s   โ”‚ 21.93 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   724.1 ยตs      โ”‚ 926.7 ยตs      โ”‚ 811.5 ยตs      โ”‚ 813.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 21.92 GiB/s   โ”‚ 17.13 GiB/s   โ”‚ 19.56 GiB/s   โ”‚ 19.52 GiB/s   โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  751.4 ยตs      โ”‚ 1.006 ms      โ”‚ 805.6 ยตs      โ”‚ 818.4 ยตs      โ”‚ 100     โ”‚ 100
                                                                     20.99 GiB/s   โ”‚ 15.68 GiB/s   โ”‚ 19.58 GiB/s   โ”‚ 19.27 GiB/s   โ”‚         โ”‚

# ---------------------------------------------------------------------------------------------------------------------------
# Recoding with `rayon` data-parallelism, also using AVX512 intrinsics for faster vector x scalar multiplication

Timer precision: 20 ns
full_rlnc_recoder                                                    fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ”œโ”€ recode                                                                          โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      50.2 ยตs       โ”‚ 137 ยตs        โ”‚ 73 ยตs         โ”‚ 69.75 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 10.94 GiB/s   โ”‚ 4.01 GiB/s    โ”‚ 7.526 GiB/s   โ”‚ 7.877 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1.5           โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.75 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1.5           โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.01 KiB   โ”‚ 64.01 KiB     โ”‚ 64.75 KiB     โ”‚ 64.03 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     49.08 ยตs      โ”‚ 69.48 ยตs      โ”‚ 58.33 ยตs      โ”‚ 58.81 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 10.58 GiB/s   โ”‚ 7.474 GiB/s   โ”‚ 8.902 GiB/s   โ”‚ 8.829 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   32.03 KiB   โ”‚ 32.03 KiB     โ”‚ 32.03 KiB     โ”‚ 32.06 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     42.36 ยตs      โ”‚ 67.97 ยตs      โ”‚ 59.55 ยตs      โ”‚ 58.57 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 11.93 GiB/s   โ”‚ 7.437 GiB/s   โ”‚ 8.488 GiB/s   โ”‚ 8.63 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   16.06 KiB   โ”‚ 16.06 KiB     โ”‚ 16.06 KiB     โ”‚ 16.07 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    40.83 ยตs      โ”‚ 74.68 ยตs      โ”‚ 65.13 ยตs      โ”‚ 56.61 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 12.33 GiB/s   โ”‚ 6.744 GiB/s   โ”‚ 7.733 GiB/s   โ”‚ 8.896 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.125 KiB   โ”‚ 8.125 KiB     โ”‚ 8.125 KiB     โ”‚ 8.155 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
โ”‚  โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   69.18 ยตs      โ”‚ 108.9 ยตs      โ”‚ 89.66 ยตs      โ”‚ 86.59 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 7.559 GiB/s   โ”‚ 4.801 GiB/s   โ”‚ 5.832 GiB/s   โ”‚ 6.039 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   4.25 KiB    โ”‚ 4.25 KiB      โ”‚ 4.25 KiB      โ”‚ 4.265 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     686.3 ยตs      โ”‚ 2.291 ms      โ”‚ 717.2 ยตs      โ”‚ 766.2 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 12.8 GiB/s    โ”‚ 3.835 GiB/s   โ”‚ 12.25 GiB/s   โ”‚ 11.47 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    632.7 ยตs      โ”‚ 769.1 ยตs      โ”‚ 656.3 ยตs      โ”‚ 658.5 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 13.12 GiB/s   โ”‚ 10.79 GiB/s   โ”‚ 12.64 GiB/s   โ”‚ 12.6 GiB/s    โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    457.9 ยตs      โ”‚ 986.2 ยตs      โ”‚ 489.3 ยตs      โ”‚ 495.1 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 17.59 GiB/s   โ”‚ 8.17 GiB/s    โ”‚ 16.46 GiB/s   โ”‚ 16.27 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   369.6 ยตs      โ”‚ 961.7 ยตs      โ”‚ 395.2 ยตs      โ”‚ 421.6 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 21.48 GiB/s   โ”‚ 8.258 GiB/s   โ”‚ 20.09 GiB/s   โ”‚ 18.83 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   128.1 KiB   โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚ 128.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  364.9 ยตs      โ”‚ 879.8 ยตs      โ”‚ 387 ยตs        โ”‚ 416.8 ยตs      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 21.65 GiB/s   โ”‚ 8.984 GiB/s   โ”‚ 20.42 GiB/s   โ”‚ 18.96 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚  โ”‚                                                                   64.25 KiB   โ”‚ 64.25 KiB     โ”‚ 64.25 KiB     โ”‚ 64.26 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     1.876 ms      โ”‚ 2.534 ms      โ”‚ 2.115 ms      โ”‚ 2.156 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 9.369 GiB/s   โ”‚ 6.936 GiB/s   โ”‚ 8.308 GiB/s   โ”‚ 8.151 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    1.546 ms      โ”‚ 2.285 ms      โ”‚ 1.63 ms       โ”‚ 1.656 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 10.73 GiB/s   โ”‚ 7.264 GiB/s   โ”‚ 10.18 GiB/s   โ”‚ 10.02 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    1.067 ms      โ”‚ 1.728 ms      โ”‚ 1.1 ms        โ”‚ 1.119 ms      โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 15.1 GiB/s    โ”‚ 9.325 GiB/s   โ”‚ 14.64 GiB/s   โ”‚ 14.38 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
โ”‚  โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   863.3 ยตs      โ”‚ 1.407 ms      โ”‚ 890.8 ยตs      โ”‚ 915 ยตs        โ”‚ 100     โ”‚ 100
โ”‚  โ”‚                                                                 18.38 GiB/s   โ”‚ 11.27 GiB/s   โ”‚ 17.82 GiB/s   โ”‚ 17.35 GiB/s   โ”‚         โ”‚
โ”‚  โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   1           โ”‚ 1             โ”‚ 1             โ”‚ 1.02          โ”‚         โ”‚
โ”‚  โ”‚                                                                   256.1 KiB   โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚ 256.1 KiB     โ”‚         โ”‚
โ”‚  โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚  โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚  โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
โ”‚  โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  815.7 ยตs      โ”‚ 1.607 ms      โ”‚ 855.1 ยตs      โ”‚ 877.8 ยตs      โ”‚ 100     โ”‚ 100
โ”‚                                                                    19.34 GiB/s   โ”‚ 9.812 GiB/s   โ”‚ 18.45 GiB/s   โ”‚ 17.97 GiB/s   โ”‚         โ”‚
โ”‚                                                                    max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                                                    alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      1           โ”‚ 1             โ”‚ 1             โ”‚ 1.01          โ”‚         โ”‚
โ”‚                                                                      128.2 KiB   โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚ 128.2 KiB     โ”‚         โ”‚
โ”‚                                                                    dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
โ”‚                                                                      2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
โ”‚                                                                      256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
โ•ฐโ”€ recode_zero_alloc                                                               โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces, recoding with 8 pieces      53.1 ยตs       โ”‚ 82.28 ยตs      โ”‚ 58.36 ยตs      โ”‚ 59.06 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 10.34 GiB/s   โ”‚ 6.677 GiB/s   โ”‚ 9.414 GiB/s   โ”‚ 9.301 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces, recoding with 16 pieces     53.54 ยตs      โ”‚ 131.6 ยตs      โ”‚ 57.05 ยตs      โ”‚ 68.2 ยตs       โ”‚ 100     โ”‚ 100
   โ”‚                                                                 9.699 GiB/s   โ”‚ 3.946 GiB/s   โ”‚ 9.102 GiB/s   โ”‚ 7.613 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   64 KiB      โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚ 64 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces, recoding with 32 pieces     40.15 ยตs      โ”‚ 115.7 ยตs      โ”‚ 59.33 ยตs      โ”‚ 69.67 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 12.58 GiB/s   โ”‚ 4.368 GiB/s   โ”‚ 8.52 GiB/s    โ”‚ 7.255 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   32 KiB      โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚ 32 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces, recoding with 64 pieces    42.06 ยตs      โ”‚ 77.84 ยตs      โ”‚ 60.1 ยตs       โ”‚ 57.12 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 11.97 GiB/s   โ”‚ 6.47 GiB/s    โ”‚ 8.38 GiB/s    โ”‚ 8.818 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   16 KiB      โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚ 16 KiB        โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces, recoding with 128 pieces   70.08 ยตs      โ”‚ 111.9 ยตs      โ”‚ 94.06 ยตs      โ”‚ 88.98 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 7.462 GiB/s   โ”‚ 4.671 GiB/s   โ”‚ 5.559 GiB/s   โ”‚ 5.877 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   8.001 KiB   โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚ 8.001 KiB     โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces, recoding with 8 pieces     659 ยตs        โ”‚ 1.507 ms      โ”‚ 710.9 ยตs      โ”‚ 791.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 13.33 GiB/s   โ”‚ 5.831 GiB/s   โ”‚ 12.36 GiB/s   โ”‚ 11.1 GiB/s    โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces, recoding with 16 pieces    591 ยตs        โ”‚ 1.348 ms      โ”‚ 635.2 ยตs      โ”‚ 715.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 14.04 GiB/s   โ”‚ 6.156 GiB/s   โ”‚ 13.06 GiB/s   โ”‚ 11.6 GiB/s    โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0.5           โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 760 B         โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0.5           โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 760 B         โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces, recoding with 32 pieces    421.6 ยตs      โ”‚ 1.033 ms      โ”‚ 489.9 ยตs      โ”‚ 646.9 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 19.11 GiB/s   โ”‚ 7.798 GiB/s   โ”‚ 16.44 GiB/s   โ”‚ 12.45 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces, recoding with 64 pieces   347.4 ยตs      โ”‚ 888.4 ยตs      โ”‚ 378.4 ยตs      โ”‚ 498.6 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 22.85 GiB/s   โ”‚ 8.939 GiB/s   โ”‚ 20.98 GiB/s   โ”‚ 15.92 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces, recoding with 128 pieces  336.4 ยตs      โ”‚ 776.2 ยตs      โ”‚ 381.2 ยตs      โ”‚ 497.4 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 23.49 GiB/s   โ”‚ 10.18 GiB/s   โ”‚ 20.73 GiB/s   โ”‚ 15.88 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   128 KiB     โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚ 128 KiB       โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces, recoding with 8 pieces     1.881 ms      โ”‚ 2.296 ms      โ”‚ 1.977 ms      โ”‚ 1.992 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 9.344 GiB/s   โ”‚ 7.655 GiB/s   โ”‚ 8.888 GiB/s   โ”‚ 8.82 GiB/s    โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   4 MiB       โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚ 4 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces, recoding with 16 pieces    1.544 ms      โ”‚ 1.791 ms      โ”‚ 1.625 ms      โ”‚ 1.636 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 10.75 GiB/s   โ”‚ 9.265 GiB/s   โ”‚ 10.21 GiB/s   โ”‚ 10.14 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   2 MiB       โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚ 2 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces, recoding with 32 pieces    1.056 ms      โ”‚ 1.262 ms      โ”‚ 1.087 ms      โ”‚ 1.105 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                                                 15.24 GiB/s   โ”‚ 12.76 GiB/s   โ”‚ 14.81 GiB/s   โ”‚ 14.58 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   1 MiB       โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚ 1 MiB         โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces, recoding with 64 pieces   863.8 ยตs      โ”‚ 985.2 ยตs      โ”‚ 893.4 ยตs      โ”‚ 900 ยตs        โ”‚ 100     โ”‚ 100
   โ”‚                                                                 18.38 GiB/s   โ”‚ 16.11 GiB/s   โ”‚ 17.77 GiB/s   โ”‚ 17.64 GiB/s   โ”‚         โ”‚
   โ”‚                                                                 max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   0           โ”‚ 0             โ”‚ 0             โ”‚ 0.01          โ”‚         โ”‚
   โ”‚                                                                   0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 15.2 B        โ”‚         โ”‚
   โ”‚                                                                 dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”‚                                                                   2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
   โ”‚                                                                   512 KiB     โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚ 512 KiB       โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces, recoding with 128 pieces  819.6 ยตs      โ”‚ 944.9 ยตs      โ”‚ 854.2 ยตs      โ”‚ 860.2 ยตs      โ”‚ 100     โ”‚ 100
                                                                     19.25 GiB/s   โ”‚ 16.69 GiB/s   โ”‚ 18.46 GiB/s   โ”‚ 18.34 GiB/s   โ”‚         โ”‚
                                                                     max alloc:    โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                       0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
                                                                       0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
                                                                     alloc:        โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                       0           โ”‚ 0             โ”‚ 0             โ”‚ 0.02          โ”‚         โ”‚
                                                                       0 B         โ”‚ 0 B           โ”‚ 0 B           โ”‚ 30.4 B        โ”‚         โ”‚
                                                                     dealloc:      โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
                                                                       2           โ”‚ 2             โ”‚ 2             โ”‚ 2             โ”‚         โ”‚
                                                                       256 KiB     โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚ 256 KiB       โ”‚         โ”‚

Full RLNC Decoder

# Decoding with AVX512-powered SIMD vector x scalar multiplication

Timer precision: 20 ns
full_rlnc_decoder                          fastest       โ”‚ slowest       โ”‚ median        โ”‚ mean          โ”‚ samples โ”‚ iters
โ•ฐโ”€ decode                                                โ”‚               โ”‚               โ”‚               โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 16 pieces    434.5 ยตs      โ”‚ 904 ยตs        โ”‚ 446 ยตs        โ”‚ 453.1 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       2.247 GiB/s   โ”‚ 1.08 GiB/s    โ”‚ 2.19 GiB/s    โ”‚ 2.155 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 32 pieces    821 ยตs        โ”‚ 1.217 ms      โ”‚ 834.3 ยตs      โ”‚ 838.3 ยตs      โ”‚ 100     โ”‚ 100
   โ”‚                                       1.19 GiB/s    โ”‚ 822.4 MiB/s   โ”‚ 1.171 GiB/s   โ”‚ 1.165 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 64 pieces    1.667 ms      โ”‚ 1.748 ms      โ”‚ 1.681 ms      โ”‚ 1.681 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       602.1 MiB/s   โ”‚ 574.1 MiB/s   โ”‚ 597 MiB/s     โ”‚ 596.9 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 128 pieces   3.836 ms      โ”‚ 3.914 ms      โ”‚ 3.85 ms       โ”‚ 3.854 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       264.7 MiB/s   โ”‚ 259.4 MiB/s   โ”‚ 263.8 MiB/s   โ”‚ 263.5 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 1.00 MB data split into 256 pieces   12.66 ms      โ”‚ 12.88 ms      โ”‚ 12.7 ms       โ”‚ 12.7 ms       โ”‚ 100     โ”‚ 100
   โ”‚                                       83.91 MiB/s   โ”‚ 82.5 MiB/s    โ”‚ 83.66 MiB/s   โ”‚ 83.62 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 16 pieces   8.566 ms      โ”‚ 16.12 ms      โ”‚ 8.655 ms      โ”‚ 8.821 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       1.823 GiB/s   โ”‚ 992 MiB/s     โ”‚ 1.805 GiB/s   โ”‚ 1.771 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 32 pieces   15.34 ms      โ”‚ 15.88 ms      โ”‚ 15.41 ms      โ”‚ 15.43 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       1.018 GiB/s   โ”‚ 1007 MiB/s    โ”‚ 1.013 GiB/s   โ”‚ 1.012 GiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 64 pieces   28.61 ms      โ”‚ 29.15 ms      โ”‚ 28.74 ms      โ”‚ 28.75 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       559.1 MiB/s   โ”‚ 548.9 MiB/s   โ”‚ 556.8 MiB/s   โ”‚ 556.6 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 128 pieces  57.11 ms      โ”‚ 57.84 ms      โ”‚ 57.29 ms      โ”‚ 57.32 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       280.4 MiB/s   โ”‚ 276.8 MiB/s   โ”‚ 279.5 MiB/s   โ”‚ 279.3 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 16.00 MB data split into 256 pieces  119.1 ms      โ”‚ 119.9 ms      โ”‚ 119.3 ms      โ”‚ 119.3 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       134.8 MiB/s   โ”‚ 133.9 MiB/s   โ”‚ 134.6 MiB/s   โ”‚ 134.5 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 16 pieces   33.41 ms      โ”‚ 36.07 ms      โ”‚ 34.52 ms      โ”‚ 34.58 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       957.5 MiB/s   โ”‚ 886.9 MiB/s   โ”‚ 926.7 MiB/s   โ”‚ 925.1 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 32 pieces   50.01 ms      โ”‚ 52.75 ms      โ”‚ 50.68 ms      โ”‚ 50.83 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       639.8 MiB/s   โ”‚ 606.5 MiB/s   โ”‚ 631.3 MiB/s   โ”‚ 629.4 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 64 pieces   82.79 ms      โ”‚ 88.45 ms      โ”‚ 84.02 ms      โ”‚ 84.51 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       386.5 MiB/s   โ”‚ 361.8 MiB/s   โ”‚ 380.8 MiB/s   โ”‚ 378.6 MiB/s   โ”‚         โ”‚
   โ”œโ”€ 32.00 MB data split into 128 pieces  152.7 ms      โ”‚ 172.3 ms      โ”‚ 157.3 ms      โ”‚ 157.9 ms      โ”‚ 100     โ”‚ 100
   โ”‚                                       209.5 MiB/s   โ”‚ 185.7 MiB/s   โ”‚ 203.4 MiB/s   โ”‚ 202.7 MiB/s   โ”‚         โ”‚
   โ•ฐโ”€ 32.00 MB data split into 256 pieces  298.2 ms      โ”‚ 327.6 ms      โ”‚ 307 ms        โ”‚ 307.6 ms      โ”‚ 100     โ”‚ 100
                                           107.5 MiB/s   โ”‚ 97.86 MiB/s   โ”‚ 104.4 MiB/s   โ”‚ 104.2 MiB/s   โ”‚         โ”‚

Performance Comparison (x86_64 vs aarch64)

Here's a side-by-side comparison of the peak median throughput between the x86_64 with AVX2 (12th Gen Intel(R) Core(TM) i7-1260P), aarch64 with NEON (AWS EC2 m8g.large with Graviton4 CPU), x86_64 with Intel AVX512 (AWS EC2 m7i.xlarge with Intel(R) Xeon(R) Platinum 8488C), and x86_64 with **AMD AVX512** (AWS EC2 m7a.large` with AMD EPYC 9R14) targets.

Component x86_64 AVX2 (default) x86_64 Intel AVX512 (default) x86_64 AMD AVX512 (default) aarch64 NEON (default) x86_64 AVX2 (parallel) x86_64 Intel AVX512 (parallel) x86_64 AMD AVX512 (parallel) aarch64 NEON (parallel)

Full RLNC Encoder | 30.14 GiB/s | 48.36 GiB/s | 52.42 GiB/s | 19.73 GiB/s | 23.39 GiB/s | 16.01 GiB/s | 25.22 GiB/s | 12.95 GiB/s Full RLNC Recoder | 27.26 GiB/s | 34.39 GiB/s | 45.15 GiB/s | 19.2 GiB/s | 12.63 GiB/s | 9.58 GiB/s | 8.902 GiB/s | 10.43 GiB/s Full RLNC Decoder | 1.59 GiB/s | 1.929 GiB/s | 2.19 GiB/s | 0.84 GiB/s | N/A | N/A | N/A | N/A

The x86_64 architecture with AMD AVX512 optimizations (m7a.large) delivers the highest performance across all operations, particularly excelling in default (single-threaded) mode. The Intel AVX512 processor (m7i.xlarge) and AMD AVX512 processor (m7a.large) both significantly outperform the x86_64 processor with AVX2 optimizations, which in turn generally outperforms the aarch64 architecture with NEON optimizations. Interestingly, for parallel operations, the AMD AVX512 processor outperforms the Intel AVX512 processor for encoding, while the performance varies for recoding operations, likely due to different core configurations and workload characteristics. Decoding remains a serial operation and is fastest on the AMD AVX512 processor.

Usage

To use rlnc library crate in your Rust project, add it as a dependency in your Cargo.toml:

[dependencies]
rlnc = "=0.8.4"                                      # On x86_64 and aarch64 targets, it offers fast encoding, recoding and decoding, using SIMD intrinsics.
# or
rlnc = { version = "=0.8.4", features = "parallel" } # Uses `rayon`-based data-parallelism for fast encoding and recoding. Note, this feature, doesn't yet parallelize RLNC decoding.

rand = { version = "=0.9.1" } # Required for random number generation

Full RLNC Workflow Example

I maintain an example demonstrating the Full RLNC workflow:

  • Encoding original data into coded pieces.
  • Recoding to generate new pieces from received coded pieces. It simulates a relay node.
  • Finally decoding all received pieces to recover the original data.

[!NOTE] New recoded pieces could be either useful or not for the Decoder, based on Recoder input coded pieces i.e. from which they are recoded and whether they have already been seen by Decoder or not.

See full_rlnc.rs example program. Run the program with $ make example.

Click to view detailed example run output ๐Ÿ‘‡
Initialized Encoder with 10240 bytes of data, split into 32 pieces, each of 321 bytes. Each coded piece will be of 353 bytes.
Initializing Decoder, expecting 32 original pieces of 321 bytes each.

Sender generating 16 initial coded pieces...
  Decoded direct piece 1: Useful.
  Decoded direct piece 2: Useful.
  Decoded direct piece 3: Useful.
  Decoded direct piece 4: Useful.
  Decoded direct piece 5: Useful.
  Decoded direct piece 6: Useful.
  Decoded direct piece 7: Useful.
  Decoded direct piece 8: Useful.
  Decoded direct piece 9: Useful.
  Decoded direct piece 10: Useful.
  Decoded direct piece 11: Useful.
  Decoded direct piece 12: Useful.
  Decoded direct piece 13: Useful.
  Decoded direct piece 14: Useful.
  Decoded direct piece 15: Useful.
  Decoded direct piece 16: Useful.

Initializing Recoder with 5648 bytes of received coded pieces.

Recoder active. Generating recoded pieces...
  Decoded recoded piece 1: Not useful.
  Decoded recoded piece 2: Not useful.
  Decoded recoded piece 3: Not useful.
  Decoded recoded piece 4: Not useful.
  Decoded recoded piece 5: Not useful.
  Decoded recoded piece 6: Not useful.
  Decoded recoded piece 7: Not useful.
  Decoded recoded piece 8: Not useful.
  Decoded recoded piece 9: Not useful.
  Decoded recoded piece 10: Not useful.
  Decoded recoded piece 11: Not useful.
  Decoded recoded piece 12: Not useful.
  Decoded recoded piece 13: Not useful.
  Decoded recoded piece 14: Not useful.
  Decoded recoded piece 15: Not useful.
  Decoded recoded piece 16: Not useful.
  Decoded recoded piece 17: Not useful.
  Decoded recoded piece 18: Not useful.
  Decoded recoded piece 19: Not useful.
  Decoded recoded piece 20: Not useful.
  Decoded recoded piece 21: Not useful.
  Decoded recoded piece 22: Not useful.
  Decoded recoded piece 23: Not useful.
  Decoded recoded piece 24: Not useful.
  Decoded recoded piece 25: Not useful.
  Decoded recoded piece 26: Not useful.
  Decoded recoded piece 27: Not useful.
  Decoded recoded piece 28: Not useful.
  Decoded recoded piece 29: Not useful.
  Decoded recoded piece 30: Not useful.
  Decoded recoded piece 31: Not useful.
  Decoded recoded piece 32: Not useful.
  Decoded recoded piece 33: Not useful.
  Decoded recoded piece 34: Not useful.
  Decoded recoded piece 35: Not useful.
  Decoded recoded piece 36: Not useful.
  Decoded recoded piece 37: Not useful.
  Decoded recoded piece 38: Not useful.
  Decoded recoded piece 39: Not useful.
  Decoded recoded piece 40: Not useful.
  Decoded recoded piece 41: Not useful.
  Decoded recoded piece 42: Not useful.
  Decoded recoded piece 43: Not useful.
  Decoded recoded piece 44: Not useful.
  Decoded recoded piece 45: Not useful.
  Decoded recoded piece 46: Not useful.
  Decoded recoded piece 47: Not useful.
  Decoded recoded piece 48: Not useful.
  Decoded recoded piece 49: Not useful.
  Decoded recoded piece 50: Not useful.
  Decoded recoded piece 51: Not useful.
  Decoded recoded piece 52: Not useful.
  Decoded recoded piece 53: Not useful.
  Decoded recoded piece 54: Not useful.
  Decoded recoded piece 55: Not useful.
  Decoded recoded piece 56: Not useful.
  Decoded recoded piece 57: Not useful.
  Decoded recoded piece 58: Not useful.
  Decoded recoded piece 59: Not useful.
  Decoded recoded piece 60: Not useful.
  Decoded recoded piece 61: Not useful.
  Decoded recoded piece 62: Not useful.
  Decoded recoded piece 63: Not useful.
  Decoded recoded piece 64: Not useful.

Initializing a new Recoder with 5648 bytes of received coded pieces.
  Decoded recoded piece 1: Useful.
  Decoded recoded piece 2: Useful.
  Decoded recoded piece 3: Useful.
  Decoded recoded piece 4: Useful.
  Decoded recoded piece 5: Useful.
  Decoded recoded piece 6: Useful.
  Decoded recoded piece 7: Useful.
  Decoded recoded piece 8: Useful.

Still need more pieces. Generating direct piece 17 from encoder...
  Decoded direct piece 17: Useful.

Still need more pieces. Generating direct piece 18 from encoder...
  Decoded direct piece 18: Useful.

Still need more pieces. Generating direct piece 19 from encoder...
  Decoded direct piece 19: Useful.

Still need more pieces. Generating direct piece 20 from encoder...
  Decoded direct piece 20: Useful.

Still need more pieces. Generating direct piece 21 from encoder...
  Decoded direct piece 21: Useful.

Still need more pieces. Generating direct piece 22 from encoder...
  Decoded direct piece 22: Useful.

Still need more pieces. Generating direct piece 23 from encoder...
  Decoded direct piece 23: Useful.

Still need more pieces. Generating direct piece 24 from encoder...
  Decoded direct piece 24: Useful.

Retrieving decoded data...

RLNC workflow completed successfully! Original data matches decoded data.
Commit count: 0

cargo fmt