【フォルスシェアリング】
フォルスシェアリング とは?
最終更新:
💡 別々の席に座ったつもりが、実は同じ長椅子で押し合いへし合い
別々のコアで使う、論理的には無関係な変数が同じキャッシュラインに載り、少なくとも一方の書き込みによってキャッシュの整合性を保つ通信が増え、性能が落ちる現象。
📌 このページのポイント
フォルスシェアリングって何? 「偽の共有」って言われてもピンとこないよ。
別々のコアで動くスレッドAとBが、それぞれ別の変数を更新する例を考えよう。変数は別でも同じキャッシュラインに載ると、整合性を保つやり取りが増えて性能が落ちることがあるんだ。
キャッシュラインって何?
どうして塊が同じだと遅くなるの?
各コアで同じラインのコピーを使うとき、一方の書き込みにより、他方のコピーの無効化や再取得などが必要になるよ。自分が使う変数自体は変わっていなくても、ライン単位の整合性の管理に巻き込まれる。そのやり取りが繰り返されると負担になるんだ。
どうやって見つけて、どう直すの?
全部の変数を離せばいいの?
もっと詳しく知りたい人へ
両方のスレッドが書き込む場合だけ起きますか?
片方が読み取り、もう片方が同じキャッシュライン内の別の変数を書き換える場合にも起きます。両方とも読み取りだけなら、その読み取り同士では書き込みによる無効化は生じません。
まとめ:ざっくりこれだけ覚えればOK!
「フォルスシェアリング」って出てきたら「別々の変数が同じキャッシュラインに載り、コア間のやり取りで遅くなること」と思えばだいたいOK!
📖 おまけ:英語の意味
「False Sharing」 = 偽の共有
💬 本当はデータを共有していないのに、同じキャッシュラインに載ったせいで共有しているかのように競合するから、この名前だよ