Ready When You Are: Efficient Condition Variables via Delegated Condition Evaluation
Dave Dice, Alex Kogan

TL;DR
This paper introduces a novel approach to condition variables that delegates condition evaluation to the notifier, significantly reducing futile wakeups and improving throughput in multi-threaded applications.
Contribution
It proposes delegating condition evaluation to the notifying thread, which eliminates unnecessary wakeups and enhances performance compared to traditional condition variables.
Findings
Achieves 3-4x throughput improvement over legacy condition variables.
Reduces context switches, lock contention, and cache pressure.
Effectively eliminates futile wakeups in multi-threaded synchronization.
Abstract
Multi-thread applications commonly utilize condition variables for communication between threads. Condition variables allow threads to block and wait until a certain condition holds, and also enable threads to wake up their blocked peers notifying them about a change to the state of shared data. Quite often such notifications are delivered to all threads, while only a small number of specific threads is interested in it. This results in so-called futile wakeups, where threads receiving the notification wake up and resume their execution only to realize that the condition they are waiting for does not hold and they need to wait again. Those wakeups cause numerous context switches, increase lock contention and cache pressure, translating into lots of wasted computing cycles and energy. In this work, we propose to delegate conditions on which threads are waiting to the thread sending…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsVLSI and FPGA Design Techniques
