MCPcopy Create free account
hub / github.com/SoftbearStudios/bitcode / histogram_parallel_u32

Function histogram_parallel_u32

src/histogram.rs:29–55  ·  view source on GitHub ↗

Based on https://github.com/facebook/zstd/blob/1518570c62b95136b6a69714012957cae5487a9a/lib/compress/hist.c#L66

(bytes: &[u8])

Source from the content-addressed store, hash-verified

27
28// Based on https://github.com/facebook/zstd/blob/1518570c62b95136b6a69714012957cae5487a9a/lib/compress/hist.c#L66
29fn histogram_parallel_u32(bytes: &[u8]) -> [u32; 256] {
30 let mut histograms = [[0; 256]; 4];
31
32 let (chunks, remainder) = bytes.split_at(bytes.len() / 16 * 16);
33 let chunks16: &[[[u8; 4]; 4]] = bytemuck::cast_slice(chunks);
34 for chunk16 in chunks16 {
35 for chunk4 in chunk16 {
36 let c = u32::from_ne_bytes(*chunk4);
37 histograms[0][c as u8 as usize] += 1;
38 histograms[1][(c >> 8) as u8 as usize] += 1;
39 histograms[2][(c >> 16) as u8 as usize] += 1;
40 histograms[3][(c >> 24) as usize] += 1;
41 }
42 }
43 for &v in remainder {
44 histograms[0][v as usize] += 1;
45 }
46
47 let (dst, src) = histograms.split_at_mut(1);
48 let dst = &mut dst[0];
49 for i in 0..256 {
50 for src in src.iter() {
51 dst[i] += src[i];
52 }
53 }
54 *dst
55}
56
57#[cfg(test)]
58mod tests {

Callers 1

histogram_parallelFunction · 0.85

Calls 1

lenMethod · 0.45

Tested by

no test coverage detected