You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+19-14Lines changed: 19 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,15 +4,15 @@ Blazing Fast Erasure-Coding with Random Linear Network Coding (RLNC)
4
4
5
5
## Introduction
6
6
7
-
`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)$.
7
+
`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 + 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. It performs runtime introspection of platform and uses the best of GFNI, 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)$.
8
8
9
-
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](#benchmarking).
9
+
Following charts show performance of RLNC encoder, recoder and decoder on **AWS EC2 `m7a.large` with AMD EPYC 9R14** - which has GFNI + AVX512 support. More performance benchmark results [below](#benchmarking).
**Let's take a practical example of how RLNC can be useful.**
@@ -116,16 +116,20 @@ Coverage Results:
116
116
|| Tested/Total Lines:
117
117
|| src/common/errors.rs: 0/1
118
118
|| src/common/gf256.rs: 9/11
119
-
|| src/common/simd/mod.rs: 6/9
119
+
|| src/common/simd/mod.rs: 8/12
120
120
|| src/common/simd/x86/avx2.rs: 10/10
121
-
|| src/common/simd/x86/mod.rs: 6/15
121
+
|| src/common/simd/x86/avx512.rs: 0/10
122
+
|| src/common/simd/x86/gfni/m128i.rs: 0/5
123
+
|| src/common/simd/x86/gfni/m256i.rs: 0/5
124
+
|| src/common/simd/x86/gfni/m512i.rs: 0/5
125
+
|| src/common/simd/x86/mod.rs: 18/33
122
126
|| src/common/simd/x86/ssse3.rs: 0/10
123
-
|| src/full/decoder.rs: 25/32
127
+
|| src/full/decoder.rs: 26/31
124
128
|| src/full/decoder_matrix.rs: 51/58
125
-
|| src/full/encoder.rs: 24/27
126
-
|| src/full/recoder.rs: 28/36
129
+
|| src/full/encoder.rs: 25/33
130
+
|| src/full/recoder.rs: 27/39
127
131
||
128
-
76.08% coverage, 159/209 lines covered
132
+
66.16% coverage, 174/263 lines covered
129
133
```
130
134
131
135
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.
@@ -3781,11 +3785,11 @@ To use `rlnc` library crate in your Rust project, add it as a dependency in your
3781
3785
3782
3786
```toml
3783
3787
[dependencies]
3784
-
rlnc = "=0.8.4" # On x86_64 and aarch64 targets, it offers fast encoding, recoding and decoding, using SIMD intrinsics.
3788
+
rlnc = "=0.8.5" # On x86_64 and aarch64 targets, it offers fast encoding, recoding and decoding, using SIMD intrinsics.
3785
3789
# or
3786
-
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.
3790
+
rlnc = { version = "=0.8.5", features = "parallel" } # Uses `rayon`-based data-parallelism for fast encoding and recoding. Note, this feature, doesn't yet parallelize RLNC decoding.
3787
3791
3788
-
rand = { version = "=0.9.1" } # Required for random number generation
3792
+
rand = { version = "=0.9.2" } # Required for random number generation
3789
3793
```
3790
3794
3791
3795
### Full RLNC Workflow Example
@@ -3806,6 +3810,7 @@ See [full_rlnc.rs](./examples/full_rlnc.rs) example program. Run the program wit
3806
3810
3807
3811
```bash
3808
3812
Initialized Encoder with 10240 bytes of data, split into 32 pieces, each of 321 bytes. Each coded piece will be of 353 bytes.
3813
+
Overhead of encoding: 10.31%
3809
3814
Initializing Decoder, expecting 32 original pieces of 321 bytes each.
0 commit comments