diff options
author | Gvozden Neskovic <[email protected]> | 2016-09-23 03:52:29 +0200 |
---|---|---|
committer | Gvozden Neskovic <[email protected]> | 2016-10-05 16:41:46 +0200 |
commit | 37f520db2d19389deb2a68065391ae2b229c6b50 (patch) | |
tree | 1a8e035b7190e3c7ae6cb3452b7d6e4ca8bbc080 /include/libuutil.h | |
parent | dc03fa3092472c40bf1b6c7d7ea3170e3ffa9e38 (diff) |
Fletcher4: Incremental using SIMD
Combine incrementally computed fletcher4 checksums. Checksums are combined
a posteriori, allowing for parallel computation on chunks to be implemented if
required. The algorithm is general, and does not add changes in each SIMD
implementation.
New test in ztest verifies incremental fletcher computations.
Checksum combining matrix for two buffers `a` and `b`, where `Ca` and `Cb` are
respective fletcher4 checksums, `Cab` is combined checksum, `s` is size of buffer
`b` (divided by sizeof(uint32_t)) is:
Cab[A] = Cb[A] + Ca[A]
Cab[B] = Cb[B] + Ca[B] + s * Ca[A]
Cab[C] = Cb[C] + Ca[C] + s * Ca[B] + s(s+1)/2 * Ca[A]
Cab[D] = Cb[D] + Ca[D] + s * Ca[C] + s(s+1)/2 * Ca[B] + s(s+1)(s+2)/6 * Ca[A]
NOTE: this calculation overflows for larger buffers. Thus, internally, the calculation
is performed on 8MiB chunks.
Signed-off-by: Gvozden Neskovic <[email protected]>
Diffstat (limited to 'include/libuutil.h')
0 files changed, 0 insertions, 0 deletions