ハーバード・アーキテクチャ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
ハーバード・アーキテクチャとは、本来は命令用とデータ用に物理的に分割された記憶装置と信号通路を用いるコンピュータ・アーキテクチャを示す用語である(フォンノイマン・アーキテクチャと対比させた用語でもある)。
目次 |
[編集] 起源
この言葉はHarvard Mark Iというリレーコンピュータから生まれたもので、このマシンは命令を穿孔テープに記憶し、データをリレーのON/OFF状態で記憶した。 このような初期のマシンでは記憶領域が極めて小さいため、CPU内部に全ての記憶領域が含まれており、命令記憶域をデータとして扱うことはなかった(プログラミングは完全にオフラインの作業であり、プログラムの中身をコンピュータ自身が参照したり更新したりすることはあり得なかった)。
フォンノイマン・アーキテクチャでは、CPUはメモリから命令を読み、メモリからデータを読み書きする。 命令とデータは同じ信号経路とメモリを使用するため、これらのアクセスは同時に発生することはない。 ハーバード・アーキテクチャのコンピュータでは、命令をメモリから読むこととデータをメモリから読むことは同時にできる。 ハーバード・アーキテクチャのコンピュータは命令の処理が完了すると同時に次の命令を読み込むことができるため、より高速化が可能と言える。 しかしながらこの処理速度の向上のためには、より多くの電気回路を必要とする。
[編集] ハーバード・アーキテクチャの復活
近年、CPUの性能はメモリの速度に比較して大きく向上した。 性能向上のためには主記憶へのアクセス回数を減らす努力が必要である。 命令を処理するたびに主記憶にアクセスする必要があるとしたら、性能向上は見込めない。 いわゆる「メモリ束縛問題」である。
メモリは高速化できるがコストがかかる。 これを解決する方法はキャッシュと呼ばれる小規模で高速なメモリを用意することである。 CPUが必要とするメモリの内容がキャッシュに存在すれば性能向上する。 逆に必要なメモリの内容がキャッシュに無ければ、メモリからキャッシュに内容を持ってくるのである。 このキャッシュの調整がコンピュータの設計で重要な観点となっている。
最新の高性能CPUチップの設計では、ハーバードとフォンノイマン両方のアーキテクチャを取り入れている。 チップ上のキャッシュメモリは命令用とデータ用に分割されているのが一般的である。 ハーバード・アーキテクチャはCPUとキャッシュの関係に生かされている。 キャッシュミスが発生すると、主記憶からデータを取ってきて、命令キャッシュかデータキャッシュに格納する。 したがって、フォンノイマン・アーキテクチャはチップの外で生きている。
ハーバード・アーキテクチャは特殊なデジタルシグナルプロセッサでよく使われている。 例えば、Analog Devices社のBlackfinプロセッサはハーバード・アーキテクチャを活用している。
加えて、汎用マイクロコントローラの多くはハーバード・アーキテクチャをベースとしている。 マイクロチップ・テクノロジー社のPICマイクロコントローラなどがその例である。 これらのプロセッサはプログラムとデータを格納する小さなメモリを内蔵しているのが特徴である。 そのため、RISCとハーバード・アーキテクチャを活用して1マシンサイクルで1命令が実行できるようになるのである。
[編集] 命令/データ分離キャッシュの問題
汎用マイクロプロセッサでキャッシュメモリを命令キャッシュとデータキャッシュを分離した場合に、より性能のよいライトバック型キャッシュを使用するとひとつの問題が発生する。ライトバック型とはキャッシュ上にある内容をCPUが書き換えた場合にそれを主記憶に同時に書き戻さないでそのまま保持しておく方式である。一方、主記憶も同時に書き換えるキャッシュをライトスルー型キャッシュと言う。ライトバック型キャッシュはそのキャッシュラインを別のキャッシュラインで置き換えるときに主記憶に書き戻すか、CPUが明示的にキャッシュフラッシュを指示したときに主記憶に全体を書き戻す。
特定用途でないコンピュータでは、コンパイラを使って実行ファイルを作る。このとき実行ファイルをメモリマップドファイルとしていると、命令列がデータキャッシュに残ることになる。そのため、コンパイル後即実行しようとした場合、命令列が主記憶に書き戻されていない場合に実行が失敗する可能性がある。同じことはインタープリタとコンパイラが一体化している一部の高級言語やある種の開発環境を提供するソフトウェアではさらに顕著に発生する。このような場合、コンパイル結果はそのソフトウェアのデータ領域におかれており、その領域にトリッキーな手法でジャンプすることで実行しようとする。そうすると、やはり命令列がメモリに書き戻されていないために実行が失敗することがある。
これは、一部分だけハーバード・アーキテクチャでありながら、本質的にはフォンノイマン・アーキテクチャであるために発生する問題である。
[編集] 関連事項
カテゴリ: コンピュータアーキテクチャ | CPU