相关疑难解决方法(0)

为什么std :: mutex在OSX上这么慢?

我有以下基准:https://gist.github.com/leifwalsh/10010580

从本质上讲,它会旋转k线程,然后每个线程执行大约1600万次/ k锁定/增量/解锁周期,使用自旋锁和a std::mutex.在OSX上,std::mutex当争用时,它比自旋锁慢得多,而在Linux上它具有竞争力或者更快.

OSX:

spinlock 1:     334ms
spinlock 2:     3537ms
spinlock 3:     4815ms
spinlock 4:     5653ms
std::mutex 1:   813ms
std::mutex 2:   38464ms
std::mutex 3:   44254ms
std::mutex 4:   47418ms
Run Code Online (Sandbox Code Playgroud)

Linux的:

spinlock 1:     305ms
spinlock 2:     1590ms
spinlock 3:     1820ms
spinlock 4:     2300ms
std::mutex 1:   377ms
std::mutex 2:   1124ms
std::mutex 3:   1739ms
std::mutex 4:   2668ms
Run Code Online (Sandbox Code Playgroud)

处理器是不同的,但没有那么不同(OSX是Intel(R)Core(TM)i7-2677M CPU @ 1.80GHz,Linux是Intel(R)Core(TM)i5-2500K CPU @ 3.30GHz),这看起来像库或内核问题.有人知道缓慢的根源吗?

为了澄清我的问题,我理解"有不同的互斥实现可以针对不同的事情进行优化,这不是问题,而是预期的".这个问题是:实现中导致这种情况的实际差异是什么?或者,如果这是一个硬件问题(也许缓存在macbook上只是慢得多),那也是可以接受的.

c++ macos multithreading

6
推荐指数
1
解决办法
2418
查看次数

标签 统计

c++ ×1

macos ×1

multithreading ×1