WIP: Reducing cache choerency traffic under contention for spinlock#147
Open
milianw wants to merge 1 commit intoefficient:masterfrom
Open
WIP: Reducing cache choerency traffic under contention for spinlock#147milianw wants to merge 1 commit intoefficient:masterfrom
milianw wants to merge 1 commit intoefficient:masterfrom
Conversation
Use the code from [1] to implement the spinlock based on std::atomic<bool> instead of std::atomic_flag. While the former is not necessarily lock-free, it is on the majority of platforms. A static assert is added to catch this on platforms that don't have this - we could potentially use the older implementation on those instead then. WIP because I don't have a good scientific benchmark for this yet. I tested it in our realworld application, and it seems to have slightly reduced the load of the spinlock, but not in a really large way... See also: efficient#146 [1]: https://rigtorp.se/spinlock/
BurningEnlightenment
suggested changes
Jun 28, 2022
| while (lock_.load(std::memory_order_relaxed)) { | ||
| // Issue X86 PAUSE or ARM YIELD instruction to reduce contention | ||
| // between hyper-threads | ||
| __builtin_ia32_pause(); |
There was a problem hiding this comment.
This intrinsic is not implemented by MSVC
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Use the code from 1 to implement the spinlock based on
std::atomic instead of std::atomic_flag. While the former
is not necessarily lock-free, it is on the majority of platforms.
A static assert is added to catch this on platforms that don't
have this - we could potentially use the older implementation on
those instead then.
WIP because I don't have a good scientific benchmark for this yet.
I tested it in our realworld application, and it seems to have
slightly reduced the load of the spinlock, but not in a really large
way...
See also: #146