ハーバード・アーキテクチャ
ハーバード・アーキテクチャとは、命令用とデータ用に物理的に分割された記憶装置と信号通路を持ち、命令用とデータ用で主記憶のアドレス空間が分かれているコンピュータ・アーキテクチャのことで、ノイマン型アーキテクチャと対比される。
[編集] 起源
この名前はHarvard Mark Iに由来する。このマシンは命令を穿孔テープに記憶し、データをリレーのON/OFF状態で記憶した。当時のそのようなマシンの利用では、命令をデータとして読み書きする必要がなかった(プログラミングは完全にオフラインの作業であり、コンパイラなどが登場するのは後のことである。鶏と卵ではあるが、自己書き換えコードの技法が広く知られたのはEDSACによる)。
ノイマン型アーキテクチャでは、CPUはメモリから命令を読み、メモリからデータを読み書きする。命令とデータは同じ信号経路とメモリを使用するため、これらのアクセスを同時にすることはできない。ハーバード・アーキテクチャでは、命令をメモリから読むこととデータをメモリから読むことは同時にできる。ハーバード・アーキテクチャは命令の処理が完了すると同時に次の命令を読み込むことができるため、より高速化が可能である。しかし、この処理速度の向上のためには、より多くの電気回路を必要とする。
[編集] ハーバード・アーキテクチャの復活
ノイマン型アーキテクチャでは、信号通路の速度が律速段階となる。フォン・ノイマン・ボトルネックである。さらに、CPUのクロック周波数がどんどん高くなったのに比し、主記憶のアクセス速度は追いつかなかったため、主記憶へのアクセスが足を引っぱるようになった。
ハーバード・アーキテクチャは、ボトルネックを2つに、主記憶も2つに分散できるため、これを解決し、高性能を実現するひとつの方法である。特殊用途のプロセッサで高速性が求められるもの、たとえばデジタルシグナルプロセッサに採用例が多く見られ、TIのTMS32010が代表例でAnalog Devices社のBlackfinなどでも使われている。
これを解決する別の手法がキャッシュであり、具体的にはキャッシュメモリである。キャッシュメモリの実装に際し、最近の高性能プロセッサ(具体的にはインテルx86ならペンティアム以降)では、ハーバード・アーキテクチャを採用した。すなわち、マイクロプロセッサ内のプロセッサコアとキャッシュメモリの構成を見るとハーバード・アーキテクチャになっているというものである。キャッシュメモリを含めてCPUとして見て、外部の主記憶との構成は従来通りノイマン型アーキテクチャである。
また、プログラムの動的ローディングや書き換えの必要ない応用で使われるマイクロコントローラの多くもハーバード・アーキテクチャをベースとしている。マイクロチップ・テクノロジー社のPICなどがその例である。これらのプロセッサはプログラムとデータを格納する小さなメモリを内蔵している。RISCとハーバード・アーキテクチャを活用して1マシンサイクルで1命令が実行できる。
[編集] 命令/データ分離キャッシュの問題
命令キャッシュとデータキャッシュを分離し、ライトバック方式(キャッシュメモリの項目を参照)を採用した場合に、次のような問題がある。基本的には、プロセッサの命令プリフェッチやDMAで起こる問題と同質である。
プログラムの動的ローディング(英: Dynamic loading)、動的コンパイル、機械語レベルの自己書き換えコードおよびそれのトランポリン(英: Trampoline)による実行など(後に挙げたものほど深刻である)、ノイマン型アーキテクチャの、プログラムの命令自身をプログラム自身により書き換え可能である、という性質を利用した技術がある。これらの実行において、単純に命令用とデータ用のキャッシュが分離されているのは、キャッシュコヒーレンシがおかしい状態にあるのと同じことである。よって何らかの対処がされている。
|
||||||||||||||||||||||||||||