読者です 読者をやめる 読者になる 読者になる

Pebble's Diary

プログラマーの作業メモ

C++11環境におけるatomic操作のパフォーマンス比較

C++11

C++11のatomic関数はどのくらいのパフォーマンスを出せるのか調べてみました。
short変数に対してスレッド2つを使い、スレッドAが書き込み、スレッドBが読み込みとします。

環境:
Intel Core i5 1.6GHz
コア数:2
2次キャッシュ(コアのキャッシュ):256KB
3次キャッシュ:3MB

結果です。
10万回の処理ループを20セット実行させた時の、最小値、最大値、平均の時間(マイクロ秒)です。

1) ロックなし (nonatomic)
min 748 us max 989 us mean 909 us

2) std:atomic_short メモリオーダー:memory_order_relaxed
min 1007 us max 1533 us mean 1471 us

3) std:atomic_short メモリオーダー:memory_order_acquire, memory_order_release
min 927 us max 1448 us mean 1357 us

4) std:atomic_short メモリオーダー:memory_order_seq_cst
min 1840 us max 4317 us mean 3331 us

5) OSSpinLockでロック
min 2270 us max 12944 us mean 4824 us

6) std::mutexでロック
min 414946 us max 701541 us mean 626411 us