ひとつのシステムにCPUが3つも4つもあるのは当然です。
また、いまにはじまったことでもありません。
本来別の仕事なのに無理やりひとつのCPUに処理させるのは、コストダウンなどの要因があるからです。分けることができるなら分けてしまえばよいのです。
ですが、バスを一部共有していたりすると、わけのわからないことを言い出す人がたまにいます。
CPU-Aのメモリ領域XXXとCPU-Bのメモリ領域YYYの内容はつねに整合性を保たねばなりません。
したがって、このメモリにアクセスするときには排他制御が必要となります。
分かりやすくいえばXXXとYYYはニコイチだということです。そんなものを別のCPUの別のメモリに置く時点で間違ってますよね。
最近は非対称なマルチプロセッサコアなどの知ったかぶり解説が散見されますが、ここにあげたマヌケな話のようなものを例示しているものは無視したほうが良さそうです。
なお、この制約をプロセッサ間通信などでラップしたライブラリでバグレスに実装したとしても、むだなオーバーヘッドが増えるばかりだということはお分かりいただけると思います。
しかもオーバーヘッドのある手段でしかアクセスできないのです。なんのために別プロセッサにしたのか理解できません。新聞のチラシを見比べて、じゃがいもの値段が一番安いスーパーへ、燃費の悪い外車ででかけるのと同じような話です。
設計が悪いというのはそういうことです。CPUごとに処理を分担するということは、前提は疎結合です。密ならオーバーヘッドだらけになります。処理の分割に失敗しているのでしょう。
オールマイティな設計というのはありませんが、
カレーは箸でも食える
と強弁するような名ばかり最適化ではシステムはまともに動かないということです。
世の中は、
割り箸でおいしくカレーを食べるには。
とか、
カレーをストローで飲む
食べるためには、フードプロセッサを使えばカンペキ。
というような話で溢れています。
コメント