Skip to content

Commit 2e3ae71

Browse files
committed
add bench
1 parent 70d92cc commit 2e3ae71

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

bench/readme.md

+26-12
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,20 @@
1414
| IntrusiveThreadPool_task_100000/iterations:10/repeats:5_stddev | 20.8 ms | 5.86 ms| 5 |
1515
| IntrusiveThreadPool_task_100000/iterations:10/repeats:5_cv | 6.50 % | 6.31 % | 5 |
1616

17+
### DistributedPool Task 100,000 (std::mutex)
18+
19+
| Benchmark | Time | CPU | Iterations |
20+
|-----------------------------------------------------------------|---------|--------|------------|
21+
| DistributedPool_task_100000/iterations:10/repeats:5 | 254 ms | 96.8 ms| 10 |
22+
| DistributedPool_task_100000/iterations:10/repeats:5 | 492 ms | 196 ms | 10 |
23+
| DistributedPool_task_100000/iterations:10/repeats:5 | 563 ms | 224 ms | 10 |
24+
| DistributedPool_task_100000/iterations:10/repeats:5 | 254 ms | 118 ms | 10 |
25+
| DistributedPool_task_100000/iterations:10/repeats:5 | 175 ms | 83.4 ms| 10 |
26+
| DistributedPool_task_100000/iterations:10/repeats:5_mean | 348 ms | 144 ms | 5 |
27+
| DistributedPool_task_100000/iterations:10/repeats:5_median | 254 ms | 118 ms | 5 |
28+
| DistributedPool_task_100000/iterations:10/repeats:5_stddev | 169 ms | 62.7 ms| 5 |
29+
| DistributedPool_task_100000/iterations:10/repeats:5_cv | 48.67 % | 43.65 %| 5 |
30+
1731
### DistributedPool Task 100,000 (spinlock)
1832

1933
| Benchmark | Time | CPU | Iterations |
@@ -42,19 +56,19 @@
4256
| DistributedPool_task_100000/iterations:10/repeats:5_stddev | 108 ms | 45.5 ms| 5 |
4357
| DistributedPool_task_100000/iterations:10/repeats:5_cv | 37.98 %| 39.18 %| 5 |
4458

45-
### DistributedPool Task 100,000 (std::mutex)
59+
### DistributedPool Task 100,000 (spinlock with weak mm)
4660

47-
| Benchmark | Time | CPU | Iterations |
48-
|-----------------------------------------------------------------|---------|--------|------------|
49-
| DistributedPool_task_100000/iterations:10/repeats:5 | 254 ms | 96.8 ms| 10 |
50-
| DistributedPool_task_100000/iterations:10/repeats:5 | 492 ms | 196 ms | 10 |
51-
| DistributedPool_task_100000/iterations:10/repeats:5 | 563 ms | 224 ms | 10 |
52-
| DistributedPool_task_100000/iterations:10/repeats:5 | 254 ms | 118 ms | 10 |
53-
| DistributedPool_task_100000/iterations:10/repeats:5 | 175 ms | 83.4 ms| 10 |
54-
| DistributedPool_task_100000/iterations:10/repeats:5_mean | 348 ms | 144 ms | 5 |
55-
| DistributedPool_task_100000/iterations:10/repeats:5_median | 254 ms | 118 ms | 5 |
56-
| DistributedPool_task_100000/iterations:10/repeats:5_stddev | 169 ms | 62.7 ms| 5 |
57-
| DistributedPool_task_100000/iterations:10/repeats:5_cv | 48.67 % | 43.65 %| 5 |
61+
| Benchmark | Time | CPU | Iterations |
62+
| --- | --- | --- | --- |
63+
| DistributedPool_task_100000/iterations:10/repeats:5 | 186 ms | 73.0 ms | 10 |
64+
| DistributedPool_task_100000/iterations:10/repeats:5 | 132 ms | 62.2 ms | 10 |
65+
| DistributedPool_task_100000/iterations:10/repeats:5 | 145 ms | 59.1 ms | 10 |
66+
| DistributedPool_task_100000/iterations:10/repeats:5 | 126 ms | 58.9 ms | 10 |
67+
| DistributedPool_task_100000/iterations:10/repeats:5 | 149 ms | 62.4 ms | 10 |
68+
| DistributedPool_task_100000/iterations:10/repeats:5_mean | 148 ms | 63.1 ms | 5 |
69+
| DistributedPool_task_100000/iterations:10/repeats:5_median | 145 ms | 62.2 ms | 5 |
70+
| DistributedPool_task_100000/iterations:10/repeats:5_stddev | 23.5 ms | 5.76 ms | 5 |
71+
| DistributedPool_task_100000/iterations:10/repeats:5_cv | 15.90 % | 9.13 % | 5 |
5872

5973
### Compare std::mutex and async_mutex with coro
6074

src/components/sync/queue_spinlock.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class QueueSpinLock final {
4242

4343
private:
4444
void Acquire(Guard* guard) {
45-
auto ancestor = tail_.exchange(guard);
45+
auto ancestor = tail_.exchange(guard, std::memory_order_acquire);
4646
if (ancestor == nullptr) {
4747
guard->SetOwner();
4848
return;
@@ -60,7 +60,8 @@ class QueueSpinLock final {
6060
}
6161

6262
Guard* old_guard = guard;
63-
while (!tail_.compare_exchange_weak(old_guard, nullptr)) {
63+
while (!tail_.compare_exchange_weak(old_guard, nullptr,
64+
std::memory_order_release)) {
6465
if (guard->HasNext()) {
6566
guard->SetNextOwner();
6667
return;

0 commit comments

Comments
 (0)