ミムド【MIMD】
MIMD
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/04/17 06:33 UTC 版)
ナビゲーションに移動 検索に移動MIMD(Multiple Instruction stream, Multiple Data stream)とは、コンピューティングにおいて並列性を達成するのに使われる技法の一種。MIMD型のマシンは、独立して機能する複数のプロセッサを持つ。任意の時点で、異なるプロセッサは異なる命令を使って異なるデータを処理している。MIMDアーキテクチャは様々な分野で応用されており、CAD/CAM、シミュレーション、モデリング、通信スイッチなどに使われている。MIMD型マシンは、共有メモリ型と分散メモリ型に分類される。この分類は、MIMD型マシンのプロセッサがどのようにメモリにアクセスするかに着目したものである。共有メモリ型マシンは、単純なバスを使ったものや、階層型のバスを使ったものがある。分散メモリ型マシンは、ハイパーキューブ型やメッシュ型の相互接続ネットワークを使うことが多い。
共有メモリ型
バス方式
メモリとプロセッサ群がバスに接続されたMIMDマシン。最も単純な形態では、単一のバスに全てが接続される。バスがボトルネックとなりやすいため、小規模なマシンでよく使われている。対称型マルチプロセッシングの多くはこの方式である。
階層型バス方式
バス方式のMIMDマシンを上位のバスで相互接続したMIMDマシン。下位のバス内でのメモリアクセスと、上位のバスを経由したメモリアクセスで、アクセスコストが異なるNUMA型である。NUMAの中でも比較的小規模なマシンに多い。
分散メモリ型
各プロセッサにローカルなメモリが個別に配置されたMIMDマシン。データを共有するには、メッセージとしてプロセッサ間でやりとりする必要がある。共有メモリがないため、メモリアクセスの衝突は問題とはならない。多数のプロセッサを1対1に接続するのはコストがかかりすぎるため、直接接続するプロセッサ数を制限するのが一般的である。しかし、その場合に直接接続していないプロセッサ間で通信をするとき、間にあってメッセージを転送するプロセッサ数が多いほど転送に時間がかかることになる。そのため、最大転送時間を考慮したネットワーク設計が重要となる。また、バス方式の共有メモリ型MIMDマシンを最小単位としてネットワークを形成する場合もある。
ハイパーキューブ型ネットワーク
超立方体の各頂点にプロセッサとメモリを配置する形態。2n個のプロセッサ(ノード)があるとき、最も遠いプロセッサまでに経由する辺の数は n 本となる。また、2n個のノードがあるとき、直接接続するノード数も n 個となる。例えば、16ノードであれば1つのノードから4本の通信路が出ていて、最も遠いノードまで3個のノードを経由する。具体例としてはnCUBEのマシンなどがある。ハイパーキューブの欠点としては、ノード数が常に 2n 個でなければならない点である(そうでないと転送できない経路が出てくる)。従って、アプリケーションが実際に必要とするノード数より多めにノードを用意しなければならない。
メッシュ型ネットワーク
2次元の格子状にプロセッサとメモリを配置する形態。各プロセッサは常に4つの近傍のプロセッサと相互接続される。格子の端は相互に接続され、全体としてトーラス型とされることが多い。ハイパーキューブに比較すると、プロセッサ数が任意である点が優れているが、最も遠いプロセッサとの距離はハイパーキューブよりも大きい。
関連項目
- 対称型マルチプロセッシング
- NUMA
- フリンの分類
- SPMD
- マルチコア
|
|
MIMD
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/04/23 13:55 UTC 版)
「マルチプロセッシング」の記事における「MIMD」の解説
詳細は「MIMD」を参照 MIMDマルチプロセッシング・アーキテクチャは、個々に独立した様々なタスクを実行するのに適しており、それぞれが異なるデータセットに対して異なる命令を並行して実行する。このような用途はニーズがあり、実装も比較的容易なので、MIMD はマルチプロセッサの大半を占めている。 処理は複数のスレッドに分割され、それぞれがハード的なプロセッサ状態を持つ。これらスレッドはひとつのプロセス内に存在する場合もあるし、別々のプロセスに属していることもある。複数のスレッドがディスパッチされるのを待っている状態となるため、このアーキテクチャはハード資源の利用効率が高い。 MIMD ではデッドロック問題や資源の競合が発生する。しかしスレッドが資源にアクセスするかどうかは予測できないため、競合を効率的に管理するのは難しい。MIMD ではオペレーティングシステムに特別なコーディングを必要とする。アプリケーションはマルチスレッド化されない限りそのような配慮は必要としない。MIMD用のオペレーティングシステムは、シングルスレッドのアプリケーションにとっては透過的であることが多い(アプリケーション側が複数プロセスのスケジューリングなどを独自に行ったりする場合はその限りではない)。システムソフトウェアもユーザーソフトウェアも「セマフォ」(または「ロック」あるいは「ゲート」とも呼ばれる)のようなソフトウェアの排他制御機構を使って、他のスレッドが同じデータにアクセスしないように防止する。このようなロック処理はコードの複雑性を増し、性能を低下させ、評価の必要性を増すが、マルチプロセッシングの利点を否定するほどの問題ではない。 同様な競合は、CPU間でハードレベルでも発生し(例えば、キャッシュの競合と破損など)、それらはハードレベルまたはハードとソフトの共同で解決しなければならない(例えば、キャッシュ・クリア命令)。マルチプロセッシングを実装する場合、性能向上のためにキャッシュという高速メモリを僅かに各プロセッサ毎に持ち、より低速なメモリ本体へのアクセスを擬似的に高速化している。各プロセッサは個別に情報を持つ事になり、この情報をプロセッサ単位で書き換え、使用する事になる。本来、メモリ上の情報を共有しているはずなのに、あるプロセッサのキャッシュ上の変更(メモリ書き込み)を他のプロセッサのキャッシュに通知しないとデータを共有できなくなってしまう。 この問題はプログラミング技法で何とかなる話ではなく、ハードウェアで何らかのキャッシュ同期機構を設けなければならない。キャッシュ同期を可能とする解決法はいくつかあって非常に複雑である。以下に例を挙げる。 メモリへの書き込みの際にキャッシュに書き込むと同時にバスにそれをブロードキャストする。ただし、アドレスだけでありメモリには書き込まない。 書き込みを行ったプロセッサ以外は、通知されたアドレスに対応したキャッシュラインを自分が持っていたら、それを消す。 メモリリードでキャッシュミスが発生したとき、メモリを読みに行くが、それにメモリではなく最新の内容を持っているプロセッサのキャッシュが自動的に応答する。 より簡単な方式として、他のプロセッサが読みに来たキャッシュラインをメモリに書き戻し(シュートダウン)し、使用する際にメモリから読ませる手法があるが、性能は劣化する。いずれにしても、キャッシュを同期させようとするとシングルプロセッサよりもバスを使用する頻度が多くなるため、バスの高性能化がシステム性能の向上に必要となる。つまり、単一バスに多数のプロセッサを接続するとバスがボトルネックとなって性能が頭打ちとなる。
※この「MIMD」の解説は、「マルチプロセッシング」の解説の一部です。
「MIMD」を含む「マルチプロセッシング」の記事については、「マルチプロセッシング」の概要を参照ください。
固有名詞の分類
- MIMDのページへのリンク