このエントリーをはてなブックマークに追加

std::mutex の簡易性能評価メモ

std::mutex の簡易な性能評価メモです.

性能評価手法

std::mutex の競合状態(コンテンション)は 2 つのスレッドを用意し,std::atomic<bool;> と短い時間のビジーループを用いて発生させています.ソースコードは gist にあります(競合ありの計算時間は,LockAndUnlockWithContention から LockAndUnlockWithPenalty を減ずることにより計算できます.Linux は競合発生時も処理時間が短いため,細かな差分を見極めるため kShortWait を 30 で計測しました.).
評価マシンは以下の通りです.
  • Mac OSX 10.10.2 (3 GHz Intel Core i7)
  • Debian 3.16.7 x86_64 GNU/Linux (Intel(R) Xeon(R) CPU E3-1220 v5 @ 3.00GHz)

性能評価

評価対象となる動作Mac での処理時間Linux での処理時間
std::atomic<bool> を用いた lock/unlock14 ns14 ns
std::mutex を用いた競合なし lock/unlock55 ns29 ns
std::mutex を用いた競合あり lock/unlock6100 ns68 ns
Mac OSX では std::mutex の競合が非常に大きなペナルティがあるのに対して,Linux ではペナルティはあるもののそれほど大きなものではありませんでした.