Skip to content

Commit ba5e454

Browse files
committed
ALP pipeline kernel
Signed-off-by: Nicholas Gates <[email protected]>
1 parent 5698311 commit ba5e454

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

encodings/alp/src/alp/operator.rs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -65,43 +65,46 @@ impl<A: ALPFloat> Kernel for UnpatchedALPKernel<A> {
6565
return Ok(());
6666
}
6767

68-
let encoded = ctx.input(self.encoded_vector_id);
69-
let encoded_vec = encoded.as_primitive().downcast::<A::ALPInt>();
70-
let encoded_buf = encoded_vec.elements().as_slice();
68+
let encoded_vec = ctx.input(self.encoded_vector_id);
69+
let encoded = encoded_vec
70+
.as_primitive()
71+
.downcast::<A::ALPInt>()
72+
.elements()
73+
.as_slice();
7174

72-
let decoded = out.as_primitive_mut().downcast::<A>();
75+
let decoded_vec = out.as_primitive_mut().downcast::<A>();
7376

7477
// If our input is in-place, and we have only a few selected elements, then iterate only
7578
// the selected elements and write them to the output.
76-
if encoded_buf.len() == N && selection.true_count() < (N / 8) {
79+
if encoded.len() == N && selection.true_count() < (N / 8) {
7780
// Reserve capacity for the true_count elements.
78-
decoded.reserve(selection.true_count().saturating_sub(decoded.capacity()));
81+
decoded_vec.reserve(
82+
selection
83+
.true_count()
84+
.saturating_sub(decoded_vec.capacity()),
85+
);
7986

8087
// SAFETY: we set_len and append_validity ensuring elements len matches validity len.
81-
unsafe { decoded.validity_mut() }.append_n(true, selection.true_count());
82-
unsafe { decoded.elements_mut().set_len(selection.true_count()) };
88+
unsafe { decoded_vec.validity_mut() }.append_n(true, selection.true_count());
89+
unsafe { decoded_vec.elements_mut().set_len(selection.true_count()) };
8390

8491
// SAFETY: we reserved capacity above.
85-
let elements = unsafe { decoded.elements_mut() };
92+
let decoded = unsafe { decoded_vec.elements_mut() };
8693

8794
let mut out_pos = 0;
8895
selection.iter_ones(|idx| {
89-
let encoded = unsafe { encoded_buf.get_unchecked(idx) };
90-
let decoded_value = A::decode_single(*encoded, self.exponents);
91-
unsafe { *elements.get_unchecked_mut(out_pos) = decoded_value };
96+
let encoded = unsafe { encoded.get_unchecked(idx) };
97+
let element = A::decode_single(*encoded, self.exponents);
98+
unsafe { *decoded.get_unchecked_mut(out_pos) = element };
9299
out_pos += 1;
93100
});
94101

95-
debug_assert_eq!(decoded.validity().len(), decoded.elements().len());
102+
debug_assert_eq!(decoded_vec.validity().len(), decoded_vec.elements().len());
96103
return Ok(());
97104
}
98105

99106
// Otherwise, iterate the entire input.
100-
decoded.extend(
101-
encoded_buf
102-
.iter()
103-
.map(|e| A::decode_single(*e, self.exponents)),
104-
);
107+
decoded_vec.extend(encoded.iter().map(|e| A::decode_single(*e, self.exponents)));
105108
Ok(())
106109
}
107110
}

0 commit comments

Comments
 (0)