コンピューティングにおいて、外部メモリアルゴリズムまたはアウトオブコアアルゴリズムとは、コンピュータのメインメモリに一度に収まらないほど大きなデータを処理するように設計されたアルゴリズムです。このようなアルゴリズムは、ハードドライブやテープドライブなどの低速バルクメモリ(補助メモリ)に格納されているデータ、またはメモリがコンピュータネットワーク上にある場合に、データを効率的にフェッチしてアクセスできるように最適化する必要があります。[ 1 ] [ 2 ]外部メモリアルゴリズムは、外部メモリモデルで分析されます。

外部メモリ アルゴリズムは、外部メモリ モデル (またはI/O モデル、またはディスク アクセス モデル)と呼ばれる理想化された計算モデルで分析されます。外部メモリ モデルは、 RAM マシン モデルに似た抽象マシンですが、メイン メモリに加えてキャッシュがあります。このモデルは、キャッシュでの読み書き操作がメイン メモリよりもはるかに高速であること、およびディスクの読み書きヘッドを使用してランダムに読み取るよりも、連続した長いブロックを読み取る方が高速であることを捉えています。外部メモリ モデルにおけるアルゴリズムの実行時間は、メモリへの読み書きに必要な回数によって定義されます。[ 3 ]このモデルは、 1988 年にAlok Aggarwal とJeffrey Vitterによって導入されました。[ 4 ]外部メモリ モデルはキャッシュ非依存モデルに関連していますが、外部メモリ モデルのアルゴリズムはブロック サイズとキャッシュサイズの両方を知っている場合があります。このため、このモデルはキャッシュ認識モデルと呼ばれることもあります。[ 5 ]
このモデルは、サイズMの内部メモリまたはキャッシュを備えたプロセッサと、無制限の外部メモリで構成されています。内部メモリと外部メモリの両方は、サイズBのブロックに分割されています。1つの入出力またはメモリ転送操作は、B個の連続する要素のブロックを外部メモリから内部メモリに移動することからなり、アルゴリズムの実行時間は、これらの入出力操作の数によって決まります。[ 4 ]
外部メモリモデルのアルゴリズムは、外部メモリから1つのオブジェクトを取得すると、サイズBのブロック全体が取得されるという事実を利用します。この特性は、局所性と呼ばれることもあります。
外部メモリモデルでは、分岐係数BのB ツリーを使用してN個のオブジェクトの中から要素を検索することが可能です。B ツリーを使用すると、検索、挿入、削除が実現できます。時間(ビッグオー記法)。情報理論的には、これはこれらの操作で可能な最小実行時間なので、Bツリーを使用することが漸近的に最適です。[ 4 ]
外部ソートは、外部メモリ設定でのソートです。外部ソートは、クイックソートに似た分散ソート、または- 方向マージソート。どちらのバリアントも漸近的に最適な実行時間を達成します。N個のオブジェクトをソートする。この上限は、外部メモリモデルにおける高速フーリエ変換にも適用される。 [ 2 ]
順列問題とは、N個の要素を特定の順列に並べ替える問題です。これは、上記のソート実行時間を必要とするソートを行うか、各要素を順番に挿入して局所性の利点を無視するかのいずれかで実行できます。したがって、順列は次のように実行できます。時間。
外部メモリモデルは、ランダムアクセスマシンなど、データ構造の分析に使用される他の一般的なモデルではモデル化されていないメモリ階層を捉えており、データ構造の下限を証明するのに役立ちます。このモデルは、内部メモリに収まらないほど大きなデータセットを扱うアルゴリズムの分析にも役立ちます。[ 4 ]
典型的な例としては、地理情報システム、特にデジタル標高モデルが挙げられます。この場合、データセット全体は容易に数ギガバイト、あるいはテラバイトを超えるデータ量になります。
この手法は汎用CPUにとどまらず、GPUコンピューティングや従来のデジタル信号処理にも適用されます。グラフィックス処理ユニット(GPGPU)による汎用コンピューティングでは、メモリ容量が少ない(一般的にRAMと呼ばれるシステムメモリに比べて)高性能グラフィックスカード(GPU)が使用され、CPUからGPUへのメモリ転送速度は(計算帯域幅に比べて)比較的遅くなります。
「out-of-core」という用語が形容詞として使われた初期の例は、1962年にIBM 360のコアメモリ以外のデバイスを指して使われた例である。[ 6 ]アルゴリズムに関して「out-of-core」という用語が使われた初期の例は1971年に見られる。[ 7 ]
{{cite book}}:|journal=無視されました (ヘルプ)