|
| 1 | +### Технические характеристики оборудования, на котором проводился эксперимент: |
| 2 | +* CPU - AMD Ryzen 7 6800H |
| 3 | +* RAM - 16 GB @ 6400Mhz |
| 4 | +* Операционная система - Windows 11 |
| 5 | +* Версия компилятора Kotlin - 1.9.22 |
| 6 | +* JVM - OpenJDK 21.0.2 |
| 7 | + |
| 8 | + |
| 9 | +### Численный эксперимент |
| 10 | + |
| 11 | + |
| 12 | +Все эксперименты проводились на 8 и 16 потоках. |
| 13 | + |
| 14 | +8 потоков: |
| 15 | + |
| 16 | +| Operations | Elimination Backoff (ops/ms) | Lockfree (ops/ms) | Acceleration | |
| 17 | +|------------------|------------------------------|---------------------|-------| |
| 18 | +| 50% push 50% pop | 48153.100 ± 4433.199 | 6037.749 ± 147.801 | 7.976 | |
| 19 | +| 75% push 25% pop | 19209.239 ± 4158.492 | 4664.322 ± 815.313 | 4.118 | |
| 20 | +| 25% push 75% pop | 41811.707 ± 9603.372 | 6050.935 ± 3184.432 | 6.910 | |
| 21 | + |
| 22 | +16 потоков: |
| 23 | + |
| 24 | +| Operations | Elimination Backoff (ops/ms) | Lockfree (ops/ms) | Acceleration | |
| 25 | +|------------------|------------------------------|---------------------|-------| |
| 26 | +| 50% push 50% pop | 37249.368 ± 3230.023 | 2964.065 ± 181.665 | 10.112 | |
| 27 | +| 75% push 25% pop | 18468.032 ± 3752.513 | 3460.063 ± 702.415 | 5.389 | |
| 28 | +| 25% push 75% pop | 33184.18 ± 6153.023 | 3890.015 ± 1479.412 | 8.530 | |
| 29 | + |
| 30 | + |
| 31 | +### Комментарии |
| 32 | + |
| 33 | +Сразу бросается в глаза зависимость ускорения от количестса потоков, где в лучшем случае мы видим прирост в 28% (при |
| 34 | +равно количестве операций). |
| 35 | + |
| 36 | +Рассмотрим отношение операций и производительности на примере 16 потоков: |
| 37 | +Сравнивая полученные результаты с результами из [статьи](https://people.csail.mit.edu/shanir/publications/Lock_Free.pdf), можно сказать, что прирост производительности при 50% push 50% pop совпал. |
| 38 | +Касаемо случая с 25% push 75% pop, прирост получается чуть меньше за счёт меньшего числа коллизий. |
| 39 | + |
| 40 | +Что интересно, эксперимент с 75% push 25% pop имеет ту же особенность, но при этом скорость стека с elimination гораздо ниже двух |
| 41 | +предыдущих случаев. Можно предположить, что из-за операции push размер памяти, занимаемый стеком увеличевается, и |
| 42 | +это приводит к снижению производительности обоих стеков, причем у стека elimination замедляется прирост по сравнению |
| 43 | +со стеком Трайбера (всего 438%). |
| 44 | + |
| 45 | + |
0 commit comments