Skip to content

Add bit fields API with atomic wrapper#2549

Open
pdillinger wants to merge 1 commit into
facebook:mainfrom
pdillinger:export-D88903954
Open

Add bit fields API with atomic wrapper#2549
pdillinger wants to merge 1 commit into
facebook:mainfrom
pdillinger:export-D88903954

Conversation

@pdillinger

Copy link
Copy Markdown
Contributor

Summary:
Inspired by work in RocksDB for HyperClockCache and parallel compression revamp, this change includes

  • BitFields.h - An API for declaring encapsulated bit field types with guaranteed layout, variant layout capability, and multi-field update capability
  • BitFieldsAtomic.h - Provides an extension of AtomicStruct for bit fields types, adding capability for non-CAS atomic updates to multiple fields (when possible).

Together these lower the barriers to entry and maintenance hurdles associated with bit-packing atomic data in data structures and algorithms. Bit-packing data into atomics not only increases the scope of problems that can be solved with lock-free or low-locking usage of atomics, it can greatly simplify the algorithmic complexity. Packing more data fields into a single atomic means fewer overheads and hazards associated with interleaved updates to separate fields. In other words, with lean design and sufficient foresight, bit-packed atomic solutions can often be simpler and more efficient than solutions involving more atomics or synchronization primitives.

Also see follow-up diff D88903968 that refactors existing structure LifoSem to use this new API.

Differential Revision: D88903954

Summary:
Inspired by work in RocksDB for HyperClockCache and parallel compression revamp, this change includes
* BitFields.h - An API for declaring encapsulated bit field types with guaranteed layout, variant layout capability, and multi-field update capability
* BitFieldsAtomic.h - Provides an extension of AtomicStruct for bit fields types, adding capability for non-CAS atomic updates to multiple fields (when possible).

Together these lower the barriers to entry and maintenance hurdles associated with bit-packing atomic data in data structures and algorithms. Bit-packing data into atomics not only increases the scope of problems that can be solved with lock-free or low-locking usage of atomics, it can greatly simplify the algorithmic complexity. Packing more data fields into a single atomic means fewer overheads and hazards associated with interleaved updates to separate fields. In other words, with lean design and sufficient foresight, bit-packed atomic solutions can often be simpler *and* more efficient than solutions involving more atomics or synchronization primitives.

Also see follow-up diff D88903968 that refactors existing structure LifoSem to use this new API.

Differential Revision: D88903954
@meta-cla meta-cla Bot added the CLA Signed label Dec 31, 2025
@meta-codesync

meta-codesync Bot commented Dec 31, 2025

Copy link
Copy Markdown

@pdillinger has exported this pull request. If you are a Meta employee, you can view the originating Diff in D88903954.

pdillinger added a commit to pdillinger/folly that referenced this pull request Dec 31, 2025
Summary:

Inspired by work in RocksDB for HyperClockCache and parallel compression revamp, this change includes
* BitFields.h - An API for declaring encapsulated bit field types with guaranteed layout, variant layout capability, and multi-field update capability
* BitFieldsAtomic.h - Provides an extension of AtomicStruct for bit fields types, adding capability for non-CAS atomic updates to multiple fields (when possible).

Together these lower the barriers to entry and maintenance hurdles associated with bit-packing atomic data in data structures and algorithms. Bit-packing data into atomics not only increases the scope of problems that can be solved with lock-free or low-locking usage of atomics, it can greatly simplify the algorithmic complexity. Packing more data fields into a single atomic means fewer overheads and hazards associated with interleaved updates to separate fields. In other words, with lean design and sufficient foresight, bit-packed atomic solutions can often be simpler *and* more efficient than solutions involving more atomics or synchronization primitives.

Also see follow-up diff D88903968 that refactors existing structure LifoSem to use this new API.

Differential Revision: D88903954
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment