-
Notifications
You must be signed in to change notification settings - Fork 473
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CachePadded: update alignment based on golang's CacheLinePadSize #636
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like this change, but I'm not an expert on this and I'd like one more +1.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh amazing; yes!
Adding in the references is 💯
bors r+ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is still the issue of some AMD CPUs fetching just 64 (maybe? I'm not an expert), but that would have to be a runtime check since we don't compile for specific CPUs so LGTM.
Build succeeded: |
Indeed, all AMD CPUs still use a 64-byte cacheline size, so this implementation will use up two lines on AMD. Previously, I had used a build script to detect |
We may want to determine the principle regarding which cache line size
I think we might be able to add an option (--cfg) to detect native CPU cache line size using a build script. (It is never enabled by default for the same reason that |
I think if you start digging that deep, it will be better served by the standard library and compiler intrinsics, where it has the canonical view of the target cpu and features. |
659: Prepare for the next release r=taiki-e a=taiki-e It's been over two months since the previous release. There are some improvements and deprecations in the master branch, and it would be nice to release them. Also, there is no breaking change that needs a major version bump. Changes: - crossbeam-epoch 0.9.1 -> 0.9.2 - Add `Atomic::compare_exchange` and `Atomic::compare_exchange_weak`. (#628) - Deprecate `Atomic::compare_and_set` and `Atomic::compare_and_set_weak`. (#628) - Make `const_fn` dependency optional. (#611) - Add unstable support for `loom`. (#487) - crossbeam-utils 0.8.1 -> 0.8.2 - Deprecate `AtomicCell::compare_and_swap`. (#619) - Add `Parker::park_deadline`. (#563) - Improve implementation of `CachePadded`. (#636) - Add unstable support for `loom`. (#487) Co-authored-by: Taiki Endo <te316e89@gmail.com>
This updates alignment of
CachePadded
on the following architectures based on golang'sCacheLinePadSize
.On x86_64 and aarch64, use 128-byte alignment as before. See #331 and #499 for reasons.
On all others, use 64-byte alignment as before.
Closes #427
cc @stjepang (when this merged, I'll send a same patch to smol-rs/cache-padded)
FYI @yoshuawuyts @cuviper (because you all were discussing about adding
CachePadded
to the standard library)