Skip to content

Commit dba96bb

Browse files
joseph-isaacsrobert3005
authored andcommitted
perf[dict]: unreferenced mask Vec<bool>
Signed-off-by: Joe Isaacs <[email protected]>
1 parent 238997c commit dba96bb

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

vortex-array/src/arrays/dict/array.rs

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,16 @@
44
use std::fmt::Debug;
55
use std::hash::Hash;
66

7+
<<<<<<< HEAD:vortex-array/src/arrays/dict/array.rs
78
use vortex_buffer::BitBuffer;
9+
=======
10+
use vortex_array::stats::{ArrayStats, StatsSetRef};
11+
use vortex_array::vtable::{ArrayVTable, NotSupported, VTable, ValidityVTable};
12+
use vortex_array::{
13+
Array, ArrayEq, ArrayHash, ArrayRef, EncodingId, EncodingRef, Precision, ToCanonical, vtable,
14+
};
15+
use vortex_buffer::{BitBuffer, BitBufferMut};
16+
>>>>>>> 541544af8 (perf[dict]: unreferenced mask Vec<bool>):encodings/dict/src/array.rs
817
use vortex_dtype::{DType, match_each_integer_ptype};
918
use vortex_error::{VortexExpect as _, VortexResult, vortex_bail};
1019
use vortex_mask::{AllOr, Mask};
@@ -114,36 +123,33 @@ impl DictArray {
114123
///
115124
/// This is useful for operations like min/max that need to ignore unreferenced values.
116125
pub fn compute_unreferenced_values_mask(&self) -> VortexResult<BitBuffer> {
117-
use vortex_buffer::BitBufferMut;
118-
119126
let codes_validity = self.codes().validity_mask();
120127
let codes_primitive = self.codes().to_primitive();
121128
let values_len = self.values().len();
122129

123-
let mut unreferenced = BitBufferMut::new_set(values_len);
130+
let mut unreferenced_vec = vec![true; values_len];
124131
if codes_validity.all_true() {
125132
match_each_integer_ptype!(codes_primitive.ptype(), |P| {
133+
#[allow(clippy::cast_possible_truncation)]
126134
for &code in codes_primitive.as_slice::<P>().iter() {
127-
#[allow(clippy::cast_possible_truncation)]
128-
unsafe {
129-
unreferenced.unset(code as usize);
130-
}
135+
unreferenced_vec[code as usize] = false;
131136
}
132137
});
133-
return Ok(unreferenced.freeze());
138+
} else {
139+
match_each_integer_ptype!(codes_primitive.ptype(), |P| {
140+
let codes = codes_primitive.as_slice::<P>();
141+
codes_validity
142+
.to_bit_buffer()
143+
.set_indices()
144+
.for_each(|idx| {
145+
unreferenced_vec[codes[idx] as usize] = false;
146+
});
147+
})
134148
}
135149

136-
match_each_integer_ptype!(codes_primitive.ptype(), |P| {
137-
let codes = codes_primitive.as_slice::<P>();
138-
codes_validity
139-
.to_bit_buffer()
140-
.set_indices()
141-
.for_each(|idx| {
142-
#[allow(clippy::cast_possible_truncation)]
143-
unreferenced.unset(codes[idx] as usize);
144-
});
145-
Ok(unreferenced.freeze())
146-
})
150+
Ok(BitBuffer::collect_bool(values_len, |idx| {
151+
unreferenced_vec[idx]
152+
}))
147153
}
148154
}
149155

vortex-array/src/arrays/dict/compute/min_max.rs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
// SPDX-License-Identifier: Apache-2.0
22
// SPDX-FileCopyrightText: Copyright the Vortex contributors
33

4-
<<<<<<< HEAD:vortex-array/src/arrays/dict/compute/min_max.rs
5-
use vortex_buffer::BitBufferMut;
6-
use vortex_dtype::match_each_unsigned_integer_ptype;
7-
=======
8-
use vortex_array::compute::{MinMaxKernel, MinMaxKernelAdapter, MinMaxResult, mask, min_max};
9-
use vortex_array::{Array as _, register_kernel};
10-
>>>>>>> 1c1b3e2db (perf[dict]: unreferenced mask):encodings/dict/src/compute/min_max.rs
114
use vortex_error::VortexResult;
125
use vortex_mask::Mask;
136

0 commit comments

Comments
 (0)