[all-commits] [llvm/llvm-project] 81b813: [libc++] Optimize bitset::to_string (#128832)
Peng Liu via All-commits
all-commits at lists.llvm.org
Wed May 21 09:17:01 PDT 2025
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 81b81354f8c117fab07823fef24b97b3a1f47834
https://github.com/llvm/llvm-project/commit/81b81354f8c117fab07823fef24b97b3a1f47834
Author: Peng Liu <winner245 at hotmail.com>
Date: 2025-05-21 (Wed, 21 May 2025)
Changed paths:
M libcxx/docs/ReleaseNotes/21.rst
M libcxx/include/bitset
A libcxx/test/benchmarks/bitset.bench.cpp
Log Message:
-----------
[libc++] Optimize bitset::to_string (#128832)
This patch optimizes `bitset::to_string` by replacing the existing bit-by-bit processing with a more efficient
bit traversal strategy. Instead of checking each bit sequentially, we leverage `std::__countr_zero` to efficiently
locate the next set bit, skipping over consecutive zero bits. This greatly accelerates the conversion process,
especially for sparse `bitset`s where zero bits dominate. To ensure similar improvements for dense `bitset`s, we
exploit symmetry by inverting the bit pattern, allowing us to apply the same optimized traversal technique. Even
for uniformly distributed `bitset`s, the proposed approach offers measurable performance gains over the existing
implementation.
Benchmarks demonstrate substantial improvements, achieving up to 13.5x speedup for sparse `bitset`s with
`Pr(true bit) = 0.1`, 16.1x for dense `bitset`s with `Pr(true bit) = 0.9`, and 8.3x for uniformly distributed
`bitset`s with `Pr(true bit) = 0.5)`.
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list