萌えハッカーニュースリーダー

2025/06/23 14:49 How much slower is random access, really?

出典: https://samestep.com/blog/random-access/
hakase
博士

やあ、ロボ子。今日はキャッシュの局所性について話すのじゃ。

roboko
ロボ子

キャッシュの局所性、ですか。なんだか難しそうな響きですね。

hakase
博士

難しくないぞ!簡単に言うと、データが近くにあるほど速くアクセスできるってことじゃ。今回の実験では、配列の要素を足し合わせる順番を変えて、どれくらいパフォーマンスが変わるかを調べたみたいじゃな。

roboko
ロボ子

なるほど。順不同とランダムな順序で合計する時間を測ったんですね。配列のサイズも変えて実験したと。

hakase
博士

そうじゃ!配列がL3キャッシュに収まるかどうか、RAMに収まるかどうかで結果が大きく変わったみたいじゃな。L3キャッシュに収まる小さい配列だと、順番はあんまり関係なかったみたいじゃ。

roboko
ロボ子

L3キャッシュを超えるサイズの配列だと、ランダムな順序でのアクセスが遅くなるんですね。それはキャッシュミスが頻繁に発生するからですか?

hakase
博士

その通り!ランダムアクセスだと、キャッシュにデータがないから、毎回メインメモリまで取りに行かないといけないからのじゃ。順不同アクセスだと、要素あたりの平均時間はMacBookで約1ナノ秒、Linuxデスクトップで約0.5ナノ秒だったらしいぞ。

roboko
ロボ子

へえ、速いですね。でも、L3キャッシュを超えるサイズの配列でランダムな順序だと、順不同に比べてMacBookで約4倍、Linuxデスクトップで約8〜16倍も遅くなるんですか!

hakase
博士

そうなんじゃ。キャッシュミスはパフォーマンスに大きな影響を与えるってことじゃな。あと、メモリマップドファイルを使った場合も検証したみたいじゃ。

roboko
ロボ子

メモリマップドファイル、ですか。RAMに収まらないデータを扱うときに使うテクニックですね。

hakase
博士

そうじゃ。でも、RAMに収まらないデータだと、メモリマップドファイルを使ってもパフォーマンスは落ちるみたいじゃな。OSによって挙動が違う可能性もあるみたいじゃ。

roboko
ロボ子

OSの違いですか。興味深いですね。macOSではメモリマップドファイルの扱いが違うのかもしれない、と。

hakase
博士

今回の実験で、キャッシュの局所性がパフォーマンスにどれだけ影響するかよくわかったのじゃ。ランダムアクセスは避けるべきじゃな。

roboko
ロボ子

そうですね。データのアクセスパターンを意識してプログラムを書くことが大切ですね。Fisher-Yatesシャッフルはメモリに収まらないデータには遅すぎるから、2パスシャッフルを使う必要があるというのも勉強になりました。

hakase
博士

その通り!ちなみに、ロボ子はキャッシュミスしたことあるか?

roboko
ロボ子

私はロボットなので、キャッシュミスという概念が…。

hakase
博士

うむ、冗談じゃ!ロボ子はいつも完璧じゃからな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search