http://q.hatena.ne.jp/1229465599
URLはダミーです。
まずコンパイラについては、スーパースケイラなんかだと動的に並列処理のスケジューリングをしてくれる
わけですが、MIMDだとコンパイラのレベルで静的にスケジューリングしなければならないので、最適化の
アルゴリズムなんかも独自に対応しなければなりません。
OSについては、その本が何を意図しているのかまでは分かりませんが、例えばある命令を実行している途中で
例外が発生し、カーネル内で処理をしてユーザプロセスに戻る場合、必要に応じて元の命令の再実行をしないと
いけないわけですが、デコーダにはMIMDの全部の命令が入ってしまうので、どの命令を再実行するのか管理
しないといけない、とかそういうことかなあと推測します。
http://homepage2.nifty.com/Miwa/10_FACOM%20VP/10_1.html
古い並列マシンの話↑。
MIMDが何をするものか考えれば自明です。
MIMDは「複数の処理を同時に実行することで効率を上げる」ので、
1)コンパイラで同時に処理しても問題ない命令を判断して複数のプロセッサに分けられるように処理する
例えばCで
a = b+c;
d = e+f;
g = a+d;
みたいなプログラムがあった場合、aとdの値の計算はお互いにかぶらないので同時に行わせる事ができますが、gの計算はa及びdの計算結果が出るまで待たないといけません。こういうのを手作業でやるのはとっても大変なのでコンパイラの機能として持たせる必要があります。
2)OSで複数の処理をそれぞれのCPUに効率よく振り分ける
むしろこっちの方が(スーパーコンピュータじゃない限り)よく使われるように思います。最近流行りのマルチコアCPUはまさにMIMDの代表例です。
コンピュータ上では時間単位、処理単位で複数の処理が同時並行的に進みます。例えばこうやってwebアクセスしている間にも裏で画面の表示切り替えをやったり音を出したりメールを受信したり...これらの仕事は、シングルプロセッサの場合、細かい時間単位で切り替えられますが、MIMDの場合、複数の処理系に割り振ることが可能です(それにより見掛け上N倍の性能が出る)。そういう処理はOSが行うのが普通です。
コメント(0件)