コンピューティングにおいて、並列プログラミングモデルは並列コンピュータアーキテクチャを抽象化したものであり、これを使用するとプログラム内でアルゴリズムとその構成を表現するのに便利です。プログラミングモデルの価値は、その一般性(さまざまなアーキテクチャに対してさまざまな問題をどれだけうまく表現できるか)とパフォーマンス(コンパイルされたプログラムがどれだけ効率的に実行できるか)によって判断できます。[1]並列プログラミングモデルの実装は、既存の言語の拡張として、 プログラミング言語から呼び出されるライブラリの形をとることができます。
特定のプログラミングモデルに関する合意は、そのモデルをサポートするさまざまな並列コンピュータが構築されることにつながり、ソフトウェアの移植性を促進するため重要です。この意味で、プログラミングモデルはハードウェアとソフトウェアの橋渡しと呼ばれます。[2]
並列プログラミングモデルの分類
並列プログラミングモデルの分類は、プロセスの相互作用と問題の分解の2つの領域に大別できます。[3] [4] [5]
プロセス相互作用
プロセス相互作用は、並列プロセスが相互に通信できるメカニズムに関係します。最も一般的な相互作用の形式は共有メモリとメッセージの受け渡しですが、相互作用は暗黙的(プログラマには見えない)になることもあります。
共有メモリ
共有メモリは、プロセス間でデータを渡すための効率的な手段です。共有メモリ モデルでは、並列プロセスがグローバル アドレス空間を共有し、非同期で読み書きします。非同期の同時アクセスは競合状態を引き起こす可能性があり、ロック、セマフォ、モニターなどのメカニズムを使用してこれを回避できます。従来のマルチコア プロセッサは共有メモリを直接サポートしており、 Cilk、OpenMP、Threading Building Blocksなどの多くの並列プログラミング言語とライブラリは共有メモリを活用するように設計されています。
メッセージパッシング
メッセージ パッシング モデルでは、並列プロセスが互いにメッセージを渡すことでデータを交換します。これらの通信は、受信側の準備ができる前にメッセージを送信できる非同期通信と、受信側の準備ができなければならない同期通信に分けられます。メッセージ パッシングの通信順次プロセス(CSP) 形式化では、同期通信チャネルを使用してプロセスを接続しており、 Occam、Limbo、Goなどの重要な言語につながっています。対照的に、アクター モデルは非同期メッセージ パッシングを使用し、 D、Scala 、SALSAなどの言語の設計に採用されています。
分割されたグローバルアドレス空間
パーティション化されたグローバル アドレス空間 (PGAS) モデルは、共有メモリとメッセージ パッシングの中間のモデルを提供します。PGAS は、論理的にパーティション化されたグローバル メモリ アドレス空間の抽象化を提供し、その一部は各プロセスにローカルです。並列プロセスは、共有メモリ モデルを彷彿とさせる方法で、グローバル アドレス空間で非同期に操作 (読み取りや書き込みなど) を実行することで通信します。ただし、グローバル アドレス空間を特定のプロセスに類似した部分に意味的にパーティション化することで、プログラマは参照の局所性を活用し、分散メモリ並列コンピュータ上で効率的に実装できるようになります。PGAS は、 Fortran 2008、Chapel、UPC++、SHMEMなど、多くの並列プログラミング言語とライブラリで提供されています。
暗黙的な相互作用
暗黙的モデルでは、プロセスの相互作用はプログラマには見えず、代わりにコンパイラやランタイムがそれを実行する責任があります。暗黙的並列性の2つの例は、高レベルの操作内の並行性が規定されているドメイン固有言語と、副作用がないため非依存関数を並列に実行できる関数型プログラミング言語です。 [6]しかし、この種の並列性は管理が難しく[7] 、 Concurrent HaskellやConcurrent MLなどの関数型言語は、並列性を明示的かつ正確に管理する機能を提供します。
問題の分解
並列プログラムは同時に実行されるプロセスから構成される。問題の分解は、構成プロセスがどのように定式化されるかに関係する。[8] [5]
タスクの並列処理
タスク並列モデルは、プロセス、つまり実行スレッドに焦点を当てています。これらのプロセスは動作が異なっていることが多く、通信の必要性が強調されます。タスク並列処理は、メッセージ パッシング通信を表現する自然な方法です。Flynnの分類法では、タスク並列処理は通常、 MIMD / MPMDまたはMISDに分類されます。
データの並列処理
データ並列モデルは、通常、規則的に構造化された配列であるデータセットに対する操作の実行に重点を置いています。一連のタスクがこのデータに対して操作を行いますが、分離したパーティションに対して独立して操作を行います。Flynnの分類法では、データ並列性は通常、 MIMD / SPMDまたはSIMDに分類されます。
ストリーム並列処理
ストリーム並列処理はパイプライン並列処理とも呼ばれ、計算を一連のステージに分割し、各ステージで入力データの一部を処理することに重点を置いています。各ステージは独立して同時に動作し、1 つのステージの出力は次のステージの入力として機能します。ストリーム並列処理は、連続データ ストリームやパイプライン計算を使用するアプリケーションに特に適しています。
暗黙の並列処理
暗黙的なプロセス相互作用と同様に、並列性の暗黙的なモデルは、コンパイラ、ランタイム、またはハードウェアが担当するため、プログラマーには何も明らかにしません。たとえば、コンパイラでは、自動並列化は順次コードを並列コードに変換するプロセスであり、コンピューター アーキテクチャでは、スーパースカラー実行は命令レベルの並列性を利用して操作を並列に実行するメカニズムです。
用語
並列プログラミングモデルは計算モデルと密接に関連しています。並列計算モデルは計算プロセスのコスト分析に使用される抽象化ですが、ハードウェアやソフトウェアで効率的に実装できるという点で、必ずしも実用的である必要はありません。対照的に、プログラミングモデルは、ハードウェアとソフトウェアの実装の実際的な考慮事項を具体的に意味します。[9]
並列プログラミング言語は、1 つまたは複数のプログラミング モデルに基づいています。たとえば、High Performance Fortranは共有メモリの相互作用とデータ並列問題の分解に基づいており、Go は共有メモリとメッセージ パッシングの相互作用のメカニズムを提供します。
並列プログラミングモデルの例
参照
参考文献
- ^ Skillicorn, David B.、「実用的な並列計算のためのモデル」、International Journal of Parallel Programming、20.2 133–158 (1991)、https://www.ida.liu.se/~chrke55/papers/modelsurvey.pdf
- ^ Leslie G. Valiant、「並列計算のためのブリッジングモデル」、Communications of the ACM、第33巻、第8号、1990年8月、103~111ページ。
- ^ John E. Savage、Models of Computation: Exploring the Power of Computing、2008、第 7 章 (並列計算)、http://cs.brown.edu/~jes/book/ 2016 年 11 月 5 日にWayback Machineにアーカイブされました
- ^ 「1.3 並列プログラミングモデル」www.mcs.anl.gov 。 2024年3月21日閲覧。
- ^ ab 「並列コンピューティング入門チュートリアル | HPC @ LLNL」。hpc.llnl.gov 。 2024年3月21日閲覧。
- ^ ハモンド、ケビン。並列関数型プログラミング:入門。国際並列記号計算シンポジウム、p. 46。1994年。
- ^ McBurney, DL、および M. Ronan Sleep。「ZAPP アーキテクチャを使用したトランスピュータベースの実験」PARLE Parallel Architectures and Languages Europe。Springer Berlin Heidelberg、1987 年。
- ^ 「2.2 パーティショニング」www.mcs.anl.gov . 2024年3月21日閲覧。
- ^ Skillicorn, David B.、Domenico Talia、「並列計算のためのモデルと言語」、ACM Computing Surveys、30.2 123–169 (1998)、https://www.cs.utexas.edu/users/browne/CS392Cf2000/papers/ModelsOfParallelComputation-Skillicorn.pdf
さらに読む
- Blaise Barney、「並列コンピューティング入門」、ローレンス・リバモア国立研究所、2013 年 6 月 10 日にオリジナルからアーカイブ、2015 年 11 月 22 日に取得
- Murray I. Cole.、アルゴリズム スケルトン: 並列計算の構造化管理(PDF)、グラスゴー大学
- J. Darlinton、M. Ghanem、HW To (1993)。「構造化並列プログラミング」。超並列コンピュータのプログラミング モデルに関するワークショップの議事録。pp. 160–169。doi :10.1109/ PMMP.1993.315543。ISBN 0-8186-4900-3.S2CID 15265646 。
{{cite book}}:|journal=無視されました (ヘルプ) - イアン・フォスター、並列プログラムの設計と構築、アルゴンヌ国立研究所
