9prady9 commented on a change in pull request #11674:
URL: https://github.com/apache/arrow/pull/11674#discussion_r748737834
##########
File path: cpp/src/arrow/util/bitmap_ops.cc
##########
@@ -237,71 +237,105 @@ bool OptionalBitmapEquals(const std::shared_ptr<Buffer>&
left, int64_t left_offs
namespace {
-template <template <typename> class BitOp>
-void AlignedBitmapOp(const uint8_t* left, int64_t left_offset, const uint8_t*
right,
- int64_t right_offset, uint8_t* out, int64_t out_offset,
- int64_t length) {
+template <template <typename> class BitOp, bool ComputeNewValidityCount>
+int64_t AlignedBitmapOp(const uint8_t* left, int64_t left_offset, const
uint8_t* right,
+ int64_t right_offset, uint8_t* out, int64_t out_offset,
+ int64_t length) {
BitOp<uint8_t> op;
DCHECK_EQ(left_offset % 8, right_offset % 8);
DCHECK_EQ(left_offset % 8, out_offset % 8);
+ uint8_t* outFront = out;
const int64_t nbytes = BitUtil::BytesForBits(length + left_offset % 8);
left += left_offset / 8;
right += right_offset / 8;
out += out_offset / 8;
+ uint64_t outPopCount = 0;
for (int64_t i = 0; i < nbytes; ++i) {
out[i] = op(left[i], right[i]);
}
+ if (ComputeNewValidityCount) {
+ outPopCount = CountSetBits(outFront, out_offset, length);
+ }
+ return outPopCount;
}
-template <template <typename> class BitOp>
-void UnalignedBitmapOp(const uint8_t* left, int64_t left_offset, const
uint8_t* right,
- int64_t right_offset, uint8_t* out, int64_t out_offset,
- int64_t length) {
+template <template <typename> class BitOp, bool ComputeNewValidityCount>
Review comment:
No, there is an performance difference, quite good I would think (first
two columns) - for the aligned code-path. Hence, I added the template bool
expecting the compiler to optimize out the validity count calculation when it
is requested.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]