参考書に「MIMDを使用する際には、プロセッサのアーキテクチャの変更だけでなく、OSやコンパイラもMIMD技術に対応している必要がある」旨が書かれていたのですが、その理由を教えていただけないでしょうか。

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2008/12/24 07:15:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:masahikokimoto No.1

回答回数241ベストアンサー獲得回数10

ポイント35pt

http://q.hatena.ne.jp/1229465599

URLはダミーです。

まずコンパイラについては、スーパースケイラなんかだと動的に並列処理のスケジューリングをしてくれる

わけですが、MIMDだとコンパイラのレベルで静的にスケジューリングしなければならないので、最適化の

アルゴリズムなんかも独自に対応しなければなりません。

OSについては、その本が何を意図しているのかまでは分かりませんが、例えばある命令を実行している途中で

例外が発生し、カーネル内で処理をしてユーザプロセスに戻る場合、必要に応じて元の命令の再実行をしないと

いけないわけですが、デコーダにはMIMDの全部の命令が入ってしまうので、どの命令を再実行するのか管理

しないといけない、とかそういうことかなあと推測します。

id:Kumappus No.2

回答回数3784ベストアンサー獲得回数185

ポイント35pt

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が行うのが普通です。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません