# データ並列プログラミング
## 定義
データ並列プログラミングは、大きなデータ集合の各要素に同じ演算を適用する仕事を、集合全体への並列演算として書くモデルである。たとえば画像の全画素に同じ演算を施す。Fortran90、C\*、\*Lisp のようなデータ並列言語では、プログラマは集合全体へ並列演算を適用し、処理系が計算を処理ノードへ多重化する。(Source: [[@1992__SPAA__The Network Architecture of the Connection Machine CM-5]])
従来は SIMD 機が支えた。全ノードが同じ命令を同時に実行するので同期が容易で、各ノードに命令フェッチ機構がいらない。一方、プロセッサごとに別のコードを実行したい場面では、コードの節を順に実行し、該当しないプロセッサは待つため効率が落ちる。MIMD 機はこの損失がない反面、集合演算の同期と集約を利用者が自作することになる。[[Connection Machine CM-5]] は SIMD を捨てて MIMD を採り、SIMD の長所(データの高速な共有と、プロセッサ集合の高速な同期)を、制御網のブロードキャスト、[[バリア同期]]、[[並列プレフィックス演算]]で取り戻した同期 MIMD である。制御プロセッサがプログラムの一区間を処理ノードへ放送し、各ノードがローカルで実行する SPMD 方式を使う。(Source: [[@1992__SPAA__The Network Architecture of the Connection Machine CM-5]])
## 未解決の問い
- 同期 MIMD が、SIMD の長所を保ちつつ MIMD の柔軟性を得るという主張は、CM-5 以外の実機でどこまで確認できるか。
## 未編纂の観察
## 関連
- 概念: [[バリア同期]] / [[並列プレフィックス演算]] / [[SIMDベクトル処理]] / [[スーパーコンピュータ]]
- ソース: [[@1992__SPAA__The Network Architecture of the Connection Machine CM-5]]
- エンティティ: [[Connection Machine CM-5]]
## 出典
- [[@1992__SPAA__The Network Architecture of the Connection Machine CM-5]]