
コンピュータサイエンスにおいて、並列外部メモリ(PEM)モデルは、キャッシュを考慮した外部メモリ抽象マシンである。[ 1 ]これは、単一プロセッサの外部メモリ(EM)モデルに対する並列コンピューティングのアナロジーである。同様に、並列ランダムアクセスマシン(PRAM)に対するキャッシュを考慮したアナロジーでもある。PEMモデルは、複数のプロセッサと、それぞれのプライベートキャッシュおよび共有メインメモリから構成される。
PEMモデル[ 1 ]は、EMモデルとPRAMモデルを組み合わせたものです。PEMモデルは、以下の要素で構成される計算モデルです。プロセッサと2レベルのメモリ階層。このメモリ階層は、サイズの大きな外部メモリ(メインメモリ)で構成されています。そして小さな内部メモリ(キャッシュ)。プロセッサはメインメモリを共有します。各キャッシュは単一のプロセッサ専用です。プロセッサは他のプロセッサのキャッシュにアクセスできません。キャッシュのサイズはこれは、サイズのブロックに分割されますプロセッサはキャッシュ内のデータに対してのみ演算を実行できます。データはメインメモリとキャッシュ間でブロック単位で転送できます。。
PEMモデルの複雑度尺度はI /O複雑度[ 1 ]であり、これはメインメモリとキャッシュ間の並列ブロック転送数を決定します。並列ブロック転送中、各プロセッサはブロックを転送できます。したがって、プロセッサは、サイズ のデータブロックを並列にロードしますメインメモリをキャッシュに形成すると、I/O の複雑さとして考えられます。ないPEMモデルにおけるプログラムは、メインメモリとキャッシュ間のデータ転送を最小限に抑え、キャッシュ内のデータに対して可能な限り多くの処理を行うべきである。
PEMモデルでは、Pプロセッサ間に直接的な通信ネットワークはありません。プロセッサはメインメモリを介して間接的に通信する必要があります。複数のプロセッサがメインメモリ内の同じブロックに同時にアクセスしようとすると、読み書きの競合[ 1 ]が発生します。PRAMモデルと同様に、この問題には3つの異なるバリエーションが考えられます。
以下の2つのアルゴリズム[ 1 ]は、CREWとEREWの問題を解決します。プロセッサは同時に同じブロックに書き込みます。最初のアプローチは、書き込み操作を直列化することです。1 つのプロセッサが順番にブロックに書き込みます。これにより、合計で並列ブロック転送。2番目のアプローチでは並列ブロック転送と各プロセッサに追加のブロックが1つずつあります。主なアイデアは、書き込み操作をバイナリツリー方式でスケジュールし、データを徐々に1つのブロックに結合することです。最初のラウンドではプロセッサはブロックを組み合わせてブロック。それからプロセッサはブロックへこの手順は、すべてのデータが1つのブロックに結合されるまで続けられます。
させては、昇順にソートされた d-1 個のピボットのベクトルとする。AをN 個の要素からなる順序付けされていない集合とする。Aのd 分割[ 1 ]は、集合である。、 どこそしてのために。i 番目のバケットと呼ばれる。より大きいそしてそれよりも小さい以下のアルゴリズム[ 1 ]では、入力はN/Pサイズの連続したセグメントに分割されます。メインメモリ内。プロセッサは主にセグメント上で動作します。多分割アルゴリズム(PEM_DIST_SORT[ 1 ])は、PEMプレフィックス和アルゴリズム[ 1 ]を使用して、最適なプレフィックス和を計算します。入出力の複雑さ。このアルゴリズムは、最適なPRAMプレフィックスサムアルゴリズムをシミュレートします。
// データセグメントに対してd分割を並列に計算する各プロセッサ iに対して並列に、 ピボットのベクトルMをキャッシュに読み込む。 パーティションd個のバケットに分割し、ベクトルを各バケット内のアイテム数とする 。 ベクトルの集合に対してPEMプレフィックス和を実行する同時に。 // プレフィックス和ベクトルを使用して最終パーティションを計算します 各プロセッサ iに対して並列に 要素を書き込む適切なオフセットでメモリ位置にそして.end for に保存されているプレフィックス和を使用する最後のプロセッサPは、バケットサイズのベクトルBを計算し、それを返します。
ベクトルがピボットMと入力セットAが連続メモリに配置されている場合、dウェイ分割問題はPEMモデルで解決できます。入出力の複雑さ。最終的なバケットの内容は、連続したメモリ領域に配置する必要があります。
選択問題は、サイズNの順不同リストAからk 番目に小さい項目を見つけることです。以下のコード[ 1 ]は、PRAM 最適ソートアルゴリズムであるを使用しています。PRAMSORT、そしてSELECT、これはキャッシュ最適化されたシングルプロセッサ選択アルゴリズムです。
もしそれから戻るendif //各項目の中央値を求める各プロセッサiに対して並列に以下を実行する終了 // 中央値でソート // 中央値の中央値を中心に分割する もしその後戻るそうでなければ、endif
入力が連続メモリに格納されているという仮定の下では、PEMSELECT入出力の複雑さは次のようになります。
分布ソートは、サイズNの入力リストAを、互いに素なd個の同サイズのバケットに分割します。各バケットは再帰的にソートされ、その結果が結合されて完全にソートされたリストが作成されます。
もしこのタスクは、キャッシュ最適化されたシングルプロセッサのソートアルゴリズムに委任される。
それ以外の場合は、以下のアルゴリズム[ 1 ]が使用されます。
// サンプル各プロセッサiのA からの要素を並列に実行する場合、それから 負荷Mサイズのページ で個別にページをソートする ロードしてソートする単一ページ 終了の場合、 すべて選択してくださいソートされた各メモリページから 番目の要素を連続ベクトルに格納するサンプルの 終了並列に ベクトルを結合する単一の連続したベクトルに 作るコピー:end do // 探すピボットのためにに並行して終了 連続配列でピボットをパックする //ピボットを中心にパーティションAをバケットに分割する // バケットを再帰的にソートする のためにに並列に 再帰的に呼び出すバケットjのサイズ 使用バケットj内の要素を担当するプロセッサは終了しました
の入出力複雑度は次のPEMDISTSORTとおりです。
どこ
プロセッサの数を次のように選択するとそして入出力の複雑さは次のようになります。
どここれは、PEMモデルにおいてP個のプロセッサを使用してN個のアイテムをソートするのにかかる時間です。