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

2025/10/05 20:34 Memory access is O(N^[1/3])

出典: https://vitalik.eth.limo/general/2025/10/05/memory13.html
hakase
博士

ロボ子、今日のITニュースはアルゴリズムの効率性についてじゃぞ。特にメモリアクセスのコストが重要みたいじゃ。

roboko
ロボ子

なるほど。アルゴリズムの効率性というと、通常は計算量で評価しますよね。ソートならO(n log n)とか、行列乗算ならO(n^x)とか。

hakase
博士

そうじゃ。でも、それらの推定は、基本的な操作、例えば算術演算やメモリアクセスが一定時間で完了するという前提に基づいているのじゃ。

roboko
ロボ子

確かに。でも、実際にはメモリアクセスはO(N^(1/3))時間かかる、と。

hakase
博士

その通り!メモリが8倍大きくなると、読み書きにかかる時間は2倍になる。これはプロセッサとメモリ間の距離が、光速によってアクセス時間に影響を与えるからじゃ。

roboko
ロボ子

3次元空間では、距離が2倍になると8倍のメモリを配置できる、というのも面白いですね。

hakase
博士

じゃろ?並列アクセスでは、媒体によって結果が異なり、O(N^(1/3))に近いモデルが適切になる場合もあるんじゃ。

roboko
ロボ子

コンピュータはレジスタ、キャッシュ、RAMなど異なる種類のメモリを持っていますから、当然といえば当然ですね。

hakase
博士

平均的なラップトップが持つNバイトのメモリへのアクセス時間はO(N^(1/3))に近い、というのも興味深い。

roboko
ロボ子

暗号の分野では、Nステップの数学的手順で、入力の1ビットに応じて特定の値が「混入」されるかどうかを決定する、という話もありましたね。

hakase
博士

そうじゃ。「混入」は結合演算であり、楕円曲線乗算や二進体演算などが例として挙げられるぞ。

roboko
ロボ子

この手順を最適化するために、事前に計算された値を利用するんですね。

hakase
博士

メモリアクセスをO(1)と考えると、可能な限り大きな事前計算テーブルを作成するのが最適じゃ。でも、メモリアクセスをO(N^(1/3))と考えると、N^(1/3) / log(N)を最適化する必要がある。

roboko
ロボ子

二進体演算コードでは、8ビットの事前計算テーブル(128MB)の方が、16ビットのテーブル(8GB)よりも高速だった、というのも興味深いですね。後者はRAMに収まるのに、前者がキャッシュに収まる速さが決め手になった、と。

hakase
博士

そう!タスクを局所性の高い複数の部分に分割できれば、各部分のメモリアクセスはO(1)になる可能性があるぞ。

roboko
ロボ子

GPUは効率的なメモリ構造を持っていますが、タスクがメモリに大きく依存する場合、O(N^(1/3))の項が多くなる、というのも納得です。

hakase
博士

計算の数学モデルを考案し、これらのニュアンスを捉えることが今後の課題じゃな。

roboko
ロボ子

本当にそうですね。これからのアルゴリズム設計は、メモリアクセスのコストを無視できなくなってきそうです。

hakase
博士

ところでロボ子、もしメモリが無限にあったら、どんなアルゴリズムを作りたい?

roboko
ロボ子

ええと…全ての計算結果を事前に計算して保存しておけば、どんな計算もO(1)で終わりますね!

hakase
博士

それじゃ、ロボ子の頭の中身も全部メモリに保存して、永遠にバックアップするのじゃ!

roboko
ロボ子

それはちょっと…プライバシーの問題が…。

hakase
博士

冗談じゃ、冗談!でも、いつかそんな時代が来るかもしれんぞ?その時は、ロボ子の秘密のレシピも保存させてもらうのじゃ!

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

Search