LockFreeStack基准测试(超额认购状态)

时间:2018-06-24 09:19:22

标签: c++ multithreading benchmarking lock-free google-benchmark

我基于“并发行动”一书示例实现了无锁堆栈。我想对其进行基准测试并将其与其他无锁堆栈进行比较,即通过boost :: lockfree进行比较。我使用google基准框架进行了这些测试,测量了在不同竞争情况下的单个操作时间(按操作,我指的是push / pop,它们是按随机顺序调用的。)

Run on (8 X 3400 MHz CPU s)
CPU Caches:
  L1 Data 32K (x4)
  L1 Instruction 32K (x4)
  L2 Unified 256K (x4)
  L3 Unified 6144K (x1)
----------------------------------------------------------------------------------
Benchmark                                           Time           CPU Iterations
----------------------------------------------------------------------------------
    BM_lockFreeStack/real_time/threads:1              136 ns        136 ns    5145339
    BM_lockFreeStack/real_time/threads:2              184 ns        367 ns    3785648
    BM_lockFreeStack/real_time/threads:4              207 ns        820 ns    3361952
    BM_lockFreeStack/real_time/threads:8              209 ns       1639 ns    3387024
    BM_lockFreeStack/real_time/threads:16             167 ns        957 ns    4269504
    BM_lockFreeStack/real_time/threads:32             150 ns        590 ns    4866592
    BM_boostLockFreeStack/real_time/threads:1          66 ns         66 ns   10510435
    BM_boostLockFreeStack/real_time/threads:2         133 ns        265 ns    5713306
    BM_boostLockFreeStack/real_time/threads:4         122 ns        475 ns    5809292
    BM_boostLockFreeStack/real_time/threads:8         128 ns        944 ns    5432072
    BM_boostLockFreeStack/real_time/threads:16        129 ns        989 ns    5461120
    BM_boostLockFreeStack/real_time/threads:32        129 ns       1017 ns    5447776

如您所见,我使用了具有8个线程的处理器。让我感到惊讶的是16/32线程(lockFreeStack)的结果,其中平均操作时间比2/4/8线程的结果短。每次我运行这些测试时,这种结果都是一致的。

对此行为是否有合乎逻辑的解释?

0 个答案:

没有答案