Skip to content

Conversation

@pdillinger
Copy link
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
Copy link

meta-codesync bot commented Dec 31, 2025

@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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant